PC端 “微信NATIVE支付“ 原理:

PC端    “微信NATIVE支付“ 原理:

首先就是调用”统一支付接口“,得到二维码code_url。调用统一支付接口需要传入很多参数,最主要的就是”通知地址“,用来接收微信支付成功通知,即支付回调。调用”统一支付接口“后得到返回值中return_code和result_code都为true,这样就说明能得到code_url。


微信NATIVE支付主要有三个点:
有个php脚本,调用统一支付接口得到code_url,code_url是用来生成支付二维码的,是微信提供的js中有方法把code_url转化为支付二维码图片。
所以这个php脚本要包含微信给的文件夹WxPayPubHelpe以便用其中的方法来给微信统一支付接口发送post请求以得到code_url。
这个php脚本还要包含微信给的js,把code_url转化为二维码图片。
2.  用户扫码完成,就微信那边确认支付成功,就会回调我们给的notice_url. 回调脚本就要处理业务逻辑了,这块逻辑就比较重。
3.  回调成功,肯定就把订单更新为已支付状态。那么当前显示的微信扫码页面,就要有js写的ajax不断的跑去调用订单状态,一旦发现已支付了,就转到提示支付成功页面,来跟用户互动。
    

数据从我的服务器发到微信,已经微信回调给我设置的notice_url,都是xml格式。在微信的官方文档文件夹WxPayPubHelper中,已经有处理xml和发放xml的方法了,直接学会这些。
<xml><appid><![CDATA[wx02f5c2e65386864f]]></appid>
<attach><![CDATA[1088774]]></attach>
<bank_type><![CDATA[CFT]]></bank_type>
<cash_fee><![CDATA[1]]></cash_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[Y]]></is_subscribe>
<mch_id><![CDATA[1290613101]]></mch_id>
<nonce_str><![CDATA[zhpyb6kybvr8txjzm52t50bbraggdbp3]]></nonce_str>
<openid><![CDATA[o7sJvwsVxaOfMMjcss6CHCWsTnkE]]></openid>
<out_trade_no><![CDATA[bj2016040126069]]></out_trade_no>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[DB9B535F0C636AE4003605E7572D9D4C]]></sign>
<time_end><![CDATA[20160401200905]]></time_end>
<total_fee>1</total_fee>
<trade_type><![CDATA[NATIVE]]></trade_type>
<transaction_id><![CDATA[4001562001201604014463681617]]></transaction_id>
</xml>


在官方的支付文档中,有文件夹WxPayPubHelper。里面有三个文件如下:
SDKRuntimeException.php用于定义一个异常类
WxPay.Pub.config.php用于设置好微信支付用的必要参数
WxPayPubHelper.php帮助类


在帮助类WxPayPubHelper.php中:
一个基类Common_util_pub,里面还有常用的函数。
Wxpay_client_pub是请求型接口,它定义了一个属性用来存放请求数据,定义了一些请求用的方法。
UnifiedOrder_pub统一支付接口类,主要就是为了生成调用统一支付接口的数据,继承自Wxpay_client_pub。

文件夹WxPayPubHelper的目的,就是能直接放到项目中,我们执行的php脚步直接引入这个里面的文件WxPayPubHelper.php,就能用文件夹的所有类了,因为WxPayPubHelper.php引入了里面的其他两个文件了(WxPay.Pub.config.php,SDKRuntimeException.php)。
WxPayPubHelper.php里面已经写好了很多函数可以直接调用,比如getSign加密,curl模拟post请求发送xml,生成32位随机字符串,arrayToXml,xmlToArray等,这些都在WxPayPubHelper.php中,别的php脚本,只要引入这个文件就能用这些函数了。还有,在WxPayPubHelper.php中定义好了调用统一支付接口的方法,先实例化UnifiedOrder_pub对象,准备好调用统一支付接口的数据,在根据Wxpay_client_pub中的方法,调用统一支付接口就能得到生成支付二维码需要的code_url。







开发中遇到的问题总结:
1.
    我扫码支付成功后,微信成功回调了。我在回调脚本中,写了把接收到的回调的xml写到文件中。文件中有回调的xml,说明回调了。但是回调的xml脚本进行sign的鉴权时,总是错误。
    实际原因是因为,我的回调脚本url是设置为http://my.mes.www.mescake.com/wxpaynative/respond.php?code=weixin的链接。这个链接里面有一个get参数code=weixin。当你配置的notice_url(回调链接)是这样的形式,即带get参数,那么微信回调的xml中,就会有<code><![CDATA[weixin]]></code>。这样,我对xml中的数据进行求sign的时候,带上了code数据,求得sign是不对的,因为微信服务器那边求得sign,是不带code的,只是他返给我的xml数据中有code数据。
    修改方式,就是配置的notice_url不要带任何get参数了,就类似http://my.mes.www.mescake.com/wxpaynative/respond.php这样的形式就ok了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值