微信支付开发 认清微信支付v2和v3

Posted 源的世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信支付开发 认清微信支付v2和v3相关的知识,希望对你有一定的参考价值。

微信支付现在分为v2版和v3版

2014年9月10号之前申请的为v2版(旧版本),之后申请的为v3版。
V2版中的参数有
AppID
AppSecret
支付专用签名串PaySignKey
商户号PartnerID
初始密钥PartnerKey
并且包含一个证书文件: 安全证书

V3版中的参数有
AppID
AppSecret
商户号PartnerID
初始密钥PartnerKey
商户号MCHID
申请编号
商户平台登录帐号
商户平台登录密码
包含5个证书文件(证书pkcs12格式、证书pem格式、证书密钥pem格式、CA证书, 安全证书)
如果收到的邮件中没有【支付专用签名串PaySignKey】,表示已经是V3版的微信支付了。

微信支付

微信支付接口的入口也和微信公众平台的产品(公众号、小程序、企业微信)一样,都是统一在微信开放平台的资源中心中,我们其实只需要访问微信开放平台这一个官网,通过资源中心,即可访问到我们所需要对接的所有微信产品的接口文档。

1、微信支付目前分为了两个,

如下: 微信支付普通商户平台 微信支付服务商平台

微信支付普通商户平台:普通商户

微信支付服务商平台:服务商

2、微信支付文档对应的地址如下:

注意:接口文档还分为了V2和V3两种,有V2版本的接口和V3版本的接口两种不同的接口,V2是旧的接口,我们应当选择最新的V3版本接口来对接开发。
1)普通商户直连模式主要包含了以下几大块:

  1. 基础支付(JSAPI支付、APP支付、H5支付、Native支付、小程序支付、合单支付、付款码支付、刷脸支付)
  2. 经营能力(微信支付分、支付即服务)
  3. 行业方案(智慧商圈)
  4. 营销工具(代金券、商家券、委托营销、消费卡、支付有礼、小程序发券插件、H5发券、图片上传(营销专用)、现金红包)
  5. 资金应用(企业付款到零钱、分账)
  6. 风险合规(消费者投诉)
  7. 其他能力(清关报关、图片上传、视频上传)

目前用得最多也就是小程序支付等基础支付接口、企业付款到零钱、分账、图片上传、视频上传。
2)服务商模式主要包含了一下几大块:

  1. 商户进件(特约商户进件)
  2. 基础支付(JSAPI支付、APP支付、H5支付、Native支付、小程序支付、合单支付、付款码支付、刷脸支付)
  3. 经营能力(支付即服务、点金计划)
  4. 行业方案(电商收付通、智慧商圈)
  5. 营销工具(代金券、商家券、委托营销、支付有礼、小程序发券插件、H5发券、图片上传(营销专用)、现金红包)
  6. 资金应用(连锁品牌分账、分账)
  7. 风险合规(商户开户意愿确认、消费者投诉)
  8. 其他能力(图片上传、视频上传)

目前用得最多也就是小程序支付等基础支付接口、分账、图片上传、视频上传。

3、区别

普通直连模式和服务商模式主要区别在于,普通直连模式不需要关联服务商商户号,可以直接发起支付,而服务商模式下服务商商户号不能直接发起支付,应当是服务商旗下的子商户通过服务商代发起支付,子商户商户号需要关联服务商商户号。
综合考虑:
1.微信普通商户,需要公众号认证才能开通。而特约商户不需要公众号即可由服务商开通,但是如果想用公众号支付,仍然需要绑定已经认证的微信公众号(服务号)。
2.虽然特约商户号,可以不认证服务号就能开通(节约300元/年),但是只能使用微信扫码支付,适合线下店铺使用。如果有线上业务建议使用普通商户。
3.大部分第三方平台或微信应用都不支持特约商户的模式(Sub_APPID),所以建议如果有网站业务需要微信收款,还是使用普通微信商户吧。
4.openid,demo里直接传的openid,服务商模式需要传sub_openid,获取的方式就不说明了,总之获取所需都是子商户即特约商户的appid,appsecret。
5.demo里设置的参数全部都要填服务商的,而不是子商户的。
6.在服务商的微信支付商户后台设置授权目录,而不是像普通商户那样在公众平台后台来设置。
普通商户版就是普通商户版。如果你自己开发自己用,你就是普通商户。服务商版就是服务商版。就是第三方服务提供商。

  服务商说明:

1.服务商可以由普通商户申请升级成为服务商
2.升级成为服务商之后没有了商户的收款能力
3.可以发展特约商户成为自己的下级商户并提供支付能力
4.可以通过发展特约商户赚取分佣和手续费

  普通商户说明:

1.能独立完成收款的微信商户
2.不可成为服务商的特约商户
3.收款能力比特约商户强

  特约商户说明:

1.服务商的下级商户
2.依赖于服务商的支付服务系统服务
3.不可以转成普通商户
4.可同时拥有普通商户和特约商户两个商户

各位看官》创作不易,点个赞!!!
诸君共勉:万事开头难,只愿肯放弃。

免责声明:本文章仅用于学习参考

ThinkPHP微信扫码支付接口

最近折腾微信扫码支付,看了微信官方文档,找了很多网页,发现和文档/demo不匹配,现在自己算是弄出来了(文件名称有所更改),贴出来分享一下

 

一.将有用的官方lib文件和使用的相关文件放置到vendor当中

二.调用同一支付接口

WechatController

//调用同一支付接口
public function native($v_oid=‘‘,$v_amount=‘‘){
ini_set(‘date.timezone‘,‘Asia/Shanghai‘);
error_reporting(E_ERROR);
//添加相关的类文件
vendor(‘Wxpay.WxPayApi‘);
vendor(‘Wxpay.log‘);
vendor(‘Wxpay.NativePay‘);
//初始化日志
$logHandler= new \CLogFileHandler("../logs/".date(‘Y-m-d‘).‘.log‘);
$log = \Log::Init($logHandler, 15);
//接受订单信息
if(trim($v_oid)<>"") //判断是否有传递订单号
{
$v_oid = trim($v_oid);
}
else
{
$this->error(订单号为空‘,U(‘User/index‘));
exit;
}

$v_amount = trim($v_amount*100); //支付金额

//调用同一支付接口
$notify = new \NativePay();
$input = new \WxPayUnifiedOrder();
//商品描述----------------------------需要参数传递/统一信息
$input->SetBody("商品描述位置");
//附加数据
$input->SetAttach("附加数据位置");
//商户订单号
$input->SetOut_trade_no($v_oid);
//总金额
$input->SetTotal_fee($v_amount);
//开始时间
$input->SetTime_start(date("YmdHis"));
//结束时间
$input->SetTime_expire(date("YmdHis", time() + 600));
//商品标记
$input->SetGoods_tag("商品标记位置");
//异步通知地址,不能携带任何参数
$input->SetNotify_url(U(‘NotifyProcess‘));
//交易类型
$input->SetTrade_type("NATIVE");
//商品id
$input->SetProduct_id("123456789");
//获取同一支付接口结果
$result = $notify->GetPayUrl($input);
$url2 = $result["code_url"];

$this->assign(‘data‘,urlencode($url2));
$this->assign(‘v_oid‘,$v_oid); $this->assign(‘v_amount‘,$v_amount/100); $this->display();}三.生成二维码
三.微信支付生成二维码
public function qrcode(){
error_reporting(E_ERROR);
vendor(‘Wxpay.phpqrcode.phpqrcode‘);
$url = $_GET["data"];
\QRcode::png($url);
}

四.异步处理
具体处理流程和方式按个人需求

//微信异步查询订单机制
public function Queryorder($transaction_id)
{
$input = new \WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
$result = \WxPayApi::orderQuery($input);
\Log::DEBUG("query:" . json_encode($result));
if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS")
{
return true;
}
return false;
}

五.再来个form表单展示二维码

<form action="" method="post" id="myForm-table">
<h2>订单信息</h2>
<div class="orderNumber">
<p class="a">订单号:"{$v_oid}"</p>
<p class="b">
<span class="left">应付金额:<strong><em>{$v_amount}</em>元</strong></span>
<span class="right">付款后,飞行之翼客服会与您联系,如有问题请咨询24小时飞行热线 400-700-2016</span>
</p>
</div>
<h2>微信支付</h2>
<img src="{:U(‘qrcode‘)}?data={$data}" alt="微信扫码">
<div class="order-submit"><a href="javascript:history.go(-1);" class="submitOrder Order">返回其他支付方式</a></div>
</form>



成功的图就不附上了,这是我遇到的问题,由于要重构,所以比较乱,无效代码也比较多,需要整理,记录下来,分享一二
 


以上是关于微信支付开发 认清微信支付v2和v3的主要内容,如果未能解决你的问题,请参考以下文章

Python3 微信支付(小程序支付)V3接口

微信支付v3开发 扫码并输入金额支付

微信支付V2版与V3版有何区别

微信支付V3 小程序支付API Java版

微信支付v3开发 收货地址共享接口

jsapi微信支付v3版