龙空技术网

微信小程序 -- 支付篇

谭龙昊雪 1484

前言:

现在大家对“php微信支付回调”大体比较关心,姐妹们都需要剖析一些“php微信支付回调”的相关知识。那么小编在网络上网罗了一些对于“php微信支付回调””的相关资讯,希望小伙伴们能喜欢,同学们快快来学习一下吧!

今天微信小程序官方又有更新了,终于不是在晚上10点多更新了。。。当然先不管那些,还是回来按照我们的思路且看且研究。。

微信开放的小程序肯定离不开支付,只是关于支付模块,官方文档给的说明太少太少,而且出现的零零散散,对于初期接触的童鞋来说并没有看上去的那么简单。这里将若干文档进行了整理,希望能减少大家踩坑的几率。

首先还是先看下支付的交互时序图

商户系统和微信支付系统主要交互:

1、小程序内调用登录接口,获取到用户的openid,api参见公共api【小程序登录API】

关于登录这块,可以参考上一篇“登录篇”

2、商户server调用支付统一下单,api参见公共api【统一下单API】

统一下单API是指商户在小程序中利用登录所获得的信息先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付(prepay_id)交易后调起支付。

接口连接的URL地址:

字段名变量名必填类型示例值描述小程序IDappid是String(32)wxd678efh567hg6787微信分配的小程序ID商户号mch_id是String(32)1230000109微信支付分配的商户号设备号device_info否String(32)013467007045764终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"随机字符串nonce_str是String(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS随机字符串,不长于32位。推荐随机数生成算法签名sign是String(32)C380BEC2BFD727A4B6845133519F3AD6签名,详见签名生成算法签名类型sign_type否String(32)HMAC-SHA256签名类型,目前支持HMAC-SHA256和MD5,默认为MD5商品描述body是String(128)腾讯充值中心-QQ会员充值商品简单描述,该字段须严格按照规范传递,具体请见参数规定商品详情detail否String(6000){"goods_detail":[{"goods_id":"iphone6s_16G","wxpay_goods_id":"1001","goods_name":"iPhone6s 16G","quantity":1,"price":528800,"goods_category":"123456","body":"苹果手机"},{"goods_id":"iphone6s_32G","wxpay_goods_id":"1002","goods_name":"iPhone6s 32G","quantity":1,"price":608800,"goods_category":"123789","body":"苹果手机"}]}商品详细列表,使用Json格式,传输签名前请务必使用CDATA标签将JSON文本串保护起来。goods_detail []:└ goods_id String 必填 32 商品的编号└ wxpay_goods_id String 可选 32 微信支付定义的统一商品编号└ goods_name String 必填 256 商品名称└ quantity Int 必填 商品数量└ price Int 必填 商品单价,单位为分└ goods_category String 可选 32 商品类目ID└ body String 可选 1000 商品描述信息附加数据attach否String(127)深圳分店附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据商户订单号out_trade_no是String(32)20150806125346商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号货币类型fee_type否String(16)CNY符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型总金额total_fee是Int888订单总金额,单位为分,详见支付金额终端IPspbill_create_ip是String(16)123.12.12.123APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。交易起始时间time_start否String(14)20091225091010订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则交易结束时间time_expire否String(14)20091227091010订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则注意:最短失效时间间隔必须大于5分钟商品标记goods_tag否String(32)WXG商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠通知地址notify_url是String(256)接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。交易类型trade_type是String(16)JSAPI小程序取值如下:JSAPI,详细说明见参数规定指定支付方式limit_pay否String(32)no_creditno_credit--指定不能使用信用卡支付用户标识openid否String(128)oUpF8uMuAJO_M2pxb1Q9zNjWeS6otrade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。openid如何获取,可参考【获取openid】。

举例如下:

<xml>

<appid>wx2421b1c4370ec43b</appid>

<attach>支付测试</attach>

<body>JSAPI支付测试</body>

<mch_id>10000100</mch_id>

<detail><![CDATA[{ "goods_detail":[ { "goods_id":"iphone6s_16G", "wxpay_goods_id":"1001", "goods_name":"iPhone6s 16G", "quantity":1, "price":528800, "goods_category":"123456", "body":"苹果手机" }, { "goods_id":"iphone6s_32G", "wxpay_goods_id":"1002", "goods_name":"iPhone6s 32G", "quantity":1, "price":608800, "goods_category":"123789", "body":"苹果手机" } ] }]]></detail> <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str> <notify_url>;/notify_url>

<openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid> <out_trade_no>1415659990</out_trade_no>

<spbill_create_ip>14.23.150.211</spbill_create_ip>

<total_fee>1</total_fee>

<trade_type>JSAPI</trade_type>

<sign>0CB01533B8C1EF103065174F50BCA001</sign>

</xml>

注:CDATA标签是为了数据不被XML解析器解析。

返回结果如下

字段名变量名必填类型示例值描述返回状态码return_code是String(16)SUCCESSSUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断返回信息return_msg否String(128)签名失败返回信息,如非空,为错误原因签名失败参数格式校验错误

以下字段在return_code为SUCCESS的时候有返回

字段名变量名必填类型示例值描述小程序IDappid是String(32)wx8888888888888888调用接口提交的小程序ID商户号mch_id是String(32)1900000109调用接口提交的商户号设备号device_info否String(32)013467007045764调用接口提交的终端设备号,随机字符串nonce_str是String(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS微信返回的随机字符串签名sign是String(32)C380BEC2BFD727A4B6845133519F3AD6微信返回的签名,详见签名算法业务结果result_code是String(16)SUCCESSSUCCESS/FAIL错误代码err_code否String(32)SYSTEMERROR详细参见第6节错误列表错误代码描述err_code_des否String(128)系统错误错误返回的信息描述

以下字段在return_code 和result_code都为SUCCESS的时候有返回

字段名变量名必填类型示例值描述交易类型trade_type是String(16)JSAPI调用接口提交的交易类型,取值如下:JSAPI,详细说明见参数规定预支付交易会话标识prepay_id是String(64)wx201410272009395522657a690389285100微信生成的预支付回话标识,用于后续接口调用中使用,该值有效期为2小时

3、小程序调起支付,api参见公共api【再次签名】

小程序调起支付数据签名字段列表

字段名变量名必填类型示例值描述小程序IDappId是Stringwxd678efh567hg6787微信分配的小程序ID时间戳timeStamp是String1230000109时间戳从1970年1月1日00:00:00至今的秒数,即当前的时间随机串nonceStr是String5K8264ILTKCH16CQ2502SI8ZNMTM67VS随机字符串,不长于32位。推荐随机数生成算法数据包package是Stringrepay_id=12312333333333333统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*签名方式signType是StringMD5签名算法,暂支持 MD5

注:以上名称的大小写要严格注意驼峰法。appId也需要参与签名,签名算法只有MD5,且签名时要按照ASCII字典序排列。

调用wx.requestPayment(OBJECT)发起微信支付

Object参数说明:

参数类型必填说明timeStampDateInt是时间戳从1970年1月1日00:00:00至今的秒数,即当前的时间nonceStrString是随机字符串,长度为32个字符以下。packageString是统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*signTypeString是签名算法,暂支持 MD5paySignString是签名,具体签名方案参见微信公众号支付帮助文档;successFunction否接口调用成功的回调函数failFunction否接口调用失败的回调函数completeFunction否接口调用结束的回调函数(调用成功、失败都会执行)

标签: #php微信支付回调