微信小程序支付
微信开放的小程序肯定是离不开支付的,但对于支付模块,官方文档提供的说明太少,显得比较分散。对于初次接触童鞋的人来说,事情并不像看上去那么简单。这里整理了几个文档,希望能减少大家踩坑的机会。
首先我们看一下支付的交互时序图。
商户系统与微信支付系统的交互主要有:
1、调用小程序中的登录接口,获取用户的openid。接口请参考公共api【小程序登录接口】
关于登录,可以参考之前的文章《登录》
2、商户服务器调用支付统一下单。 API请参考公共API【统一订单API】
统一订单接口是指商户利用登录小程序获取的信息,首先调用该接口在微信支付服务后台生成预付款交易订单,返回正确的预付款(prepay_id)交易,然后发起支付。
接口连接的URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder
字段名称变量名称必填类型取值说明小程序ID appid is String (32) wxd678efh567hg6787 微信分配的小程序ID 商户号mch_id is String (32) 1230000109 微信支付分配的商户号设备号device_info 否String (32) 013467007045764 随机字符串nonce_str是一个String(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS随机字符串,长度不超过32位。推荐的随机数生成算法签名为String(32)C380BEC2BFD727A4B6845133519F3AD6 签名。详细请参见签名生成算法签名类型sign_type no String(32)HMAC-SHA256 签名类型。目前支持HMAC-SHA256和MD5。默认为MD5。产品描述正文为String(128) 腾讯充值中心- QQ会员充值产品简介。该字段必须严格按照规范传输。详情参见商品详情详情参数规定No String(6000){'goods_detail':[{'goods_id':'iphone6s_16G', 'wxpay_goods_id':'1001','goods_name':'iPhone6s 16G', '数量':1,'价格':528800,'goods_category':'123456','body':'iPhone'},{'goods_id': 'iphone6s_32G','wxpay_goods_id':'1002','goods_name':'iPhone6s 32G','数量':1,'价格':608800,'goods_category':'123789','body':'iPhone'}]} 商品详细列表为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 No String (127) 深圳分公司附加数据,在查询API 和支付通知中原样返回,该字段主要用于商户携带的自定义数据命令。商户订单号out_trade_no为String(32)20150806125346。商户系统内的订单号。它可以包含32 个字符以内的字母。有关其他说明,请参阅商户订单号。币种类型Fee_type 编号String (16) CNY 符合ISO 4217 标准三字母代码,默认人民币:CNY,其他值列表请参见币种类型。总金额total_fee为Int888订单总金额,单位为美分。详情请参阅付款金额。 Terminal IPspbill_create_ip is String (16) 123.12.12.123 APP和网页支付提交客户端IP,原生支付填写调用微信支付接口的机器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)http://www.weixin.qq.com/wxpay/pay.php 接收微信支付异步通知回调地址。通知URL必须是可直接访问的URL,且不能带参数。交易类型trade_type为String(16)。 JSAPI小程序的值如下:JSAPI。详细说明请参见参数说明。指定付款方式limit_pay no。 String(32) no_creditno_credit--指定不能使用信用卡支付。用户ID openid 号String(128)oUpF8uMuAJO_M2pxb1Q9zNjWeS6otrade_type=JSAPI ,必须传递该参数,用户在商户appid下的唯一标识。如何获取openid,请参考【获取openid】。示例如下:
XML
appidwx2421b1c4370ec43b/appid
附加付款测试/附加
bodyJSAPI支付测试/body
mch_id10000100/mch_id
详细![CDATA[{ 'goods_detail':[ { 'goods_id':'iphone6s_16G', 'wxpay_goods_id':'1001', 'goods_name':'iPhone6s 16G', '数量':1, '价格':528800, 'goods_cate血淋淋的:'123456', 'body':'iPhone' }, { 'goods_id':'iphone6s_32G', 'wxpay_goods_id':'1002', 'goods_name':'iPhone6s 32G', '数量':1 '价格':6088, 00 , 'goods_category':'123789', 'body':'iPhone' } ] }]]/detail nonce_str1add1a30ac87aa2db72f57a2375d8fec/nonce_str notify_urlhttp://wxpay.wxutil.com/pub_v2/pay/notify.v2.php/notify_url
openidoUpF8uMuAJO_M2pxb1Q9zNjWeS6o/openid out_trade_no1415659990/out_trade_no
spbill_create_ip14.23.150.211/spbill_create_ip
总费用1/总费用
trade_typeJSAPI/trade_type
标志0CB01533B8C1EF103065174F50BCA001/标志
/xml
注意:CDATA 标记用于防止XML 解析器解析数据。
返回结果如下
字段名称变量名称必填类型取值说明返回状态码return_code is String (16) SUCCESSSUCCESS/FAIL 该字段是通信标识,不是事务标识。无论交易是否成功,都需要通过检查result_code来判断返回信息return_msg 否String (128) 签名失败返回信息如果不为空,则为错误原因。签名失败。参数格式校验错误。当return_code为SUCCESS时,返回以下字段。
字段名称变量名称必填类型取值说明小程序ID appid 为String (32) wx8888888888888888 调用接口提交的小程序ID 商户号mch_id 为String (32) 1900000109 调用接口提交的商户号设备号device_info 否String (32) ) 013467007045764 调用接口提交的终端设备编号,随机字符串nonce_str为String(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS 微信返回的随机字符串签名sign为String(32)C380BEC2BFD727A4B6845133519F3AD6 微信返回的签名,参见签名算法业务结果_代码是字符串(16)SUCCESSSUCCESS /FAIL 错误代码err_code 否String (32) SYSTEMERROR 详见第6 节错误列表错误代码说明err_code_des 否String (128) 系统错误返回错误信息说明当return_code 和result_code 为都成功了
字段名称变量名称必填类型取值说明交易类型trade_type is String (16) JSAPI调用接口提交的交易类型,取值如下: JSAPI,详细说明见参数规定预付款交易会话标识符prepay_id is String ( 64) wx201410272009395522657a690389285100 微信生成的预付费回调ID用于后续接口调用。该值的有效期为2 小时。 3.小程序激活支付。 API请参考公共API【重新签名】
小程序调用支付数据签名字段列表
字段名称变量名称必填类型示例值说明小程序IDappId 为Stringwxd678efh567hg6787 微信分配的小程序ID 时间戳timeStamp 为String1230000109 时间戳1970 年1 月1 日00:00:00 到现在的秒数,即当前时间随机字符串nonceStr 为String5K8264ILTKCH16CQ 2502SI8ZNMTM67VS 随机字符串,不超过32 个字符。推荐的随机数生成算法数据包为Stringrepay_id=12312333333333333。统一下单接口返回的prepay_id参数值,提交格式如:prepay_id=*签名方法signType为StringMD5签名算法,目前支持MD5。注:请严格注意以上名称的大小写。驼背法。 appId也需要参与签名。签名算法只有MD5,并且签名必须按照ASCII字典顺序排列。
调用wx.requestPayment(OBJECT)发起微信支付
用户评论
这款微信小程序在支付方面做得相当便捷,节省了很多时间和精力。
有11位网友表示赞同!
对于购物、美食或是在线付费服务的场景,它让支付流程变得简单无比。
有13位网友表示赞同!
安全性能挺高的,让人用起来很放心,尤其是输入金额时,有很好的保护机制。
有18位网友表示赞同!
偶尔还会有一些小优惠或是支付满减活动,增加了用户体验的乐趣。
有14位网友表示赞同!
无论是扫码支付还是充值各类服务账号,都挺流畅的,没有遇到过明显的卡顿问题。
有12位网友表示赞同!
对于不熟悉移动支付的人来说,微信小程序的引导界面很友好,易于上手。
有16位网友表示赞同!
操作界面清晰明了,一目了然,即便在匆忙之中也能迅速完成交易。
有5位网友表示赞同!
偶尔会有些小惊喜出现,比如随机的红包或是优惠券赠送,让人买得更开心。
有10位网友表示赞同!
对于经常使用微信的人来说,这款小程序成为了生活的一部分,不可或缺。
有9位网友表示赞同!
支付历史记录清晰可查,便于管理财务状况和消费习惯。
有10位网友表示赞同!
在支付过程中遇到问题时,客服响应很快,能够迅速解决问题。
有12位网友表示赞同!
与其他微信功能整合流畅,支付体验更加一体化、高效。
有20位网友表示赞同!
为防止过度消费,这里有预算管控的功能,帮助用户合理规划支出。
有17位网友表示赞同!
定期会有更新和优化,添加了更多的安全及便利特性,用户体验不断提高。
有18位网友表示赞同!
支持多种支付方式的集成,满足不同用户的习惯需求。
有11位网友表示赞同!
对于老年人来说,这款小程序的操作简单易懂,大大方便了他们的生活。
有13位网友表示赞同!
在线购物或缴费时,无需下载App,直接在微信内完成,非常便捷。
有5位网友表示赞同!
偶尔会有关于环保的提示,在支付时可以减少纸质单据使用,很符合当今社会的需求。
有12位网友表示赞同!
支付流程中的个性化定制选项非常多,可以根据个人偏好调整设置。
有16位网友表示赞同!
与其他小程序互联方便,无需跳转到其他应用,使用体验更流畅、连贯。
有9位网友表示赞同!