问题模块 框架类型 问题类型 操作系统 工具版本
开发者工具 微信小程序 Bug macOS 1.02.1806120
发现微信小程序的这个问题非常诡异
首先,我从服务器获取到了五个必须的字段,这五个字段,我如果直接在代码里面写死数据,可以直接调起支付,没有问题.当我直接把拿到的数据赋值给wx . requestPayment,作为参数的时候,会出现错误,-1的情况就出现了.我的具体代码如下
success : function ( res ) { wx . showToast ({ title : '创建订单成功' , duration : 1000 , mask : true }) console . log ( res );
var time = String ( res . data . data . timeStamp ) var nonce = String ( res . data . data . nonceStr ) var packageName = String ( res . data . data . packageValue ) var pay = String ( res . data . data . paySign ) var sign = String ( res . data . data . signType )
console . log ( time ) console . log ( nonce ) console . log ( packageName ) console . log ( pay ) console . log ( sign )
wx . requestPayment ({ 'timeStamp' : time , 'nonceStr' : nonce , 'package' : packageName , 'signType' : 'MD5' , 'paySign' : sign , success : function ( res ) { console . log ( "success" ); console . log ( res ); }, fail : function ( res ) { console . log ( "fail" ); console . log ( res ); }, complete : function ( res ) { console . log ( "complete" ); console . log ( res ); } }) }
代码对应的控制台输出如下 {data: {…}, header: {…}, statusCode: 200, errMsg: "request:ok"}data: code: 0data: appId: "wxc3c8295cb8a9c3d8"nonceStr: "1530760287929"packageValue: "prepay_id=wx051111278716365a8b8d5f3e0644257598"paySign: "CE7713C270DF032CF76F34C7D67B08BA"signType: "MD5"timeStamp: "1530760287"__proto__: Objectdesc: "成功"__proto__: ObjecterrMsg: "request:ok"header: {Content-Type: "application/json;charset=UTF-8", Date: "Thu, 05 Jul 2018 03:11:27 GMT", Vary: "Accept-Encoding", Content-Length: "242"}statusCode: 200__proto__: Object
11:11:28.016 pay.js? [sm]:177 153076028711:11:28.017 pay.js? [sm]:178 153076028792911:11:28.018 pay.js? [sm]:179 prepay_id=wx051111278716365a8b8d5f3e064425759811:11:28.018 pay.js? [sm]:180 CE7713C270DF032CF76F34C7D67B08BA11:11:28.019 pay.js? [sm]:181 MD5
11:11:37.733 pay.js? [sm]:196 fail11:11:37.734 pay.js? [sm]:197 {err_code: "-1", err_desc: "支付验证签名失败", errMsg: "requestPayment:fail"}
但是控制台输出的数据,我直接把控制台参数写死代码就可以调用支付,这个微信的好奇怪啊,难道跟编码有关系么?
我如果直接复制控制台参数到代码里面,直接可以过,而且调用起来微信没有问题.wx . requestPayment ({ 'timeStamp' : '1530760287' , 'nonceStr' : '1530760287929' , 'package' : 'prepay_id=wx051111278716365a8b8d5f3e0644257598' , 'signType' : 'MD5' , 'paySign' : 'CE7713C270DF032CF76F34C7D67B08BA' , success : function ( res ) { console . log ( "success" ); console . log ( res ); }, fail : function ( res ) { console . log ( "fail" ); console . log ( res ); }, complete : function ( res ) { console . log ( "complete" ); console . log ( res ); } })
微信小程序的bug?我已经实验过好多次了,就是这样的.不知道原因.希望微信小程序的开发人员看看这个问题原因,我从接口获取数据,传递给wx.requestPayment就无法通过,我如果把数据直接写死就没问题,而且我已经对参数做了字符串处理,依然错误,希望尽快给个解决办法.目前我无法解决这个问题了.
微信小程序开发问题解答
微信小程序开发者回答:
问题出在paySign
,要么是你的签名有问题,要么是你返回签名的方式有问题。还有,尽量用官方支付包,尽量少自己写支付后台包,很容易出问题。
微信小程序开发者回答:
用的就是官方的,同样的值,只要接口传递,赋值给wx.requestPayment就出错,但是从控制台拷贝出来,写死在代码里面就不出错,这个诡异的问题,paySign没有任何问题.
微信小程序开发者回答:
你的随机字符串怎么不是三十二位的?
微信小程序开发者回答:
实例亲测成功,除了随机字符串,其他基本差不多
微信小程序开发者回答:
文档里面说了,小于等于32位的就可以,不一定非要是32位的,我现在的问题是,所有的参数都没问题,但是我直接赋值给requestPayment,就报错,但是我如果把参数在控制台打出来,然后直接字符串写死在代码里面就能通过,同样的东西,什么都没变,就会出现这样的错误,特别奇怪
微信小程序开发者回答:
生成签名数据时也是三十二位随机字符串,况且明确提示你签名有问题。我们当时对支付后台做了小改动,你检查一下后台吧。不必太纠结。这是很成熟的技术。总会调试ok的。
本文网址:http://www.91bianli.com/weixinxiaochengxu/49984.html