收藏
回答

小程序支付很诡异的bug

框架类型 问题类型 操作系统 工具版本
小程序 Bug macOS 1.02.1806120

发现小程序的这个问题非常诡异

  1. 首先,我从服务器获取到了五个必须的字段,这五个字段,我如果直接在代码里面写死数据,可以直接调起支付,没有问题.

  2. 当我直接把拿到的数据赋值给wx . requestPayment,作为参数的时候,会出现错误,-1的情况就出现了.

    我的具体代码如下


  3. success :  function ( res )  {

  4. wx . showToast ({

  5. title :  '创建订单成功' ,

  6. duration :  1000 ,

  7. mask :  true

  8. })

  9. console . log ( res );


  10. var time  = String ( res . data . data . timeStamp )

  11. var nonce  = String ( res . data . data . nonceStr )

  12. var packageName  = String ( res . data . data . packageValue )

  13. var pay  = String ( res . data . data . paySign )

  14. var sign  = String ( res . data . data . signType )


  15. console . log ( time )

  16. console . log ( nonce )

  17. console . log ( packageName )

  18. console . log ( pay )

  19. console . log ( sign )


  20. wx . requestPayment ({

  21. 'timeStamp' : time ,

  22. 'nonceStr' : nonce ,  

  23. 'package' : packageName ,

  24. 'signType' :  'MD5' ,

  25. 'paySign' : sign ,

  26. success :  function ( res )  {

  27. console . log ( "success" );

  28. console . log ( res );

  29. },

  30. fail :  function ( res )  {

  31. console . log ( "fail" );

  32. console . log ( res );

  33. },

  34. complete :  function ( res )  {

  35. console . log ( "complete" );

  36. console . log ( res );

  37. }

  38. })

  39. }


代码对应的控制台输出如下

{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 1530760287

11:11:28.017 pay.js? [sm]:178 1530760287929

11:11:28.018 pay.js? [sm]:179 prepay_id=wx051111278716365a8b8d5f3e0644257598

11:11:28.018 pay.js? [sm]:180 CE7713C270DF032CF76F34C7D67B08BA

11:11:28.019 pay.js? [sm]:181 MD5


11:11:37.733 pay.js? [sm]:196 fail

11: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就无法通过,我如果把数据直接写死就没问题,而且我已经对参数做了字符串处理,依然错误,希望尽快给个解决办法.目前我无法解决这个问题了.

回答关注问题邀请回答
收藏

3 个回答

  • zlm
    zlm
    2018-07-05

    问题出在paySign

    ,要么是你的签名有问题,要么是你返回签名的方式有问题。还有,尽量用官方支付包,尽量少自己写支付后台包,很容易出问题。

    2018-07-05
    有用 4
    回复 8
    • 2018-07-05

      用的就是官方的,同样的值,只要接口传递,赋值给wx.requestPayment就出错,但是从控制台拷贝出来,写死在代码里面就不出错,这个诡异的问题,paySign没有任何问题.

      2018-07-05
      回复
    • zlm
      zlm
      2018-07-05

      你的随机字符串怎么不是三十二位的?

      2018-07-05
      4
      回复
    • zlm
      zlm
      2018-07-05


      实例亲测成功,除了随机字符串,其他基本差不多



      2018-07-05
      2
      回复
    • 2018-07-06回复zlm

      文档里面说了,小于等于32位的就可以,不一定非要是32位的,我现在的问题是,所有的参数都没问题,但是我直接赋值给requestPayment,就报错,但是我如果把参数在控制台打出来,然后直接字符串写死在代码里面就能通过,同样的东西,什么都没变,就会出现这样的错误,特别奇怪

      2018-07-06
      回复
    • zlm
      zlm
      2018-07-06回复

      生成签名数据时也是三十二位随机字符串,况且明确提示你签名有问题。我们当时对支付后台做了小改动,你检查一下后台吧。不必太纠结。这是很成熟的技术。总会调试ok的。

      2018-07-06
      1
      回复
    查看更多(3)
  • akira  ོ有事请留言
    akira ོ有事请留言
    2018-07-10

    你在js中的sign的值传错了,实际传入的是signType的值

    2018-07-10
    有用 1
    回复 1
    • 2018-08-14

      感谢,问题已经解决了.

      2018-08-14
      回复
  • 陈
    2018-07-09

    你可以试试去空格,有些时候它莫名的就会多一个空格出来

    2018-07-09
    有用
    回复
登录 后发表内容