欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信小程序微信支付的一些坑

程序员文章站 2022-03-30 10:01:12
使用的是Node.js作为后端 统一下单: appid:这里的appid是调起微信支付的appid mch_id:商户号,需要注意的是商户号要与appid对应 nonce_str:Math.random().toString(36).substr(2)这是我的随机字符串的生成算法 sign:这里的签 ......

使用的是node.js作为后端

统一下单:

appid:这里的appid是调起微信支付的appid

mch_id:商户号,需要注意的是商户号要与appid对应

nonce_str:math.random().tostring(36).substr(2)这是我的随机字符串的生成算法

sign:这里的签名是第一次签名,后面还会讲到第二次签名,主要注意点如下:

  1.首先要把需要传递请求参数使用key1=value&key2=value2的形式进行拼接也就是文档上的参数,除去sign

  2.所拼接的字符串的属性名的顺序,必须按照ascii码(字典序)进行排序

  3.在最后拼接上使用的key,这里的key指的是商户平台设置的api秘钥>>>>微信商户平台(pay.weixin.qq.com)-->账户设置-->api安全-->密钥设置

  4.进行md5签名或者hmac-sha256签名方式,这里使用到的是md5的方式

  5.最后需要需要转换成大写

sign_type:签名方式,要与使用的签名方式一直

spbill_create_ip:这里的ip网上有人说随便填,但是我在尝试时候使用了127.0.0.1返回的数据中数ip错误,所以使用了网络的真实ip,这里使用到了

trade_type:这里使用jsapi,需要在商户平台进行开通

openid:用户在商户appid下的唯一标识 获取方式请参考小程序api wx.login和code2session,其中appid,secret应该对应

最后请求参数生成完毕之后需要传递一个xml文件到服务器这里使用到了xml2js

一般请求失败后可以先检查请求数据格式是否正确,再检查参数顺序以及key是否对应

wx.requestpayment(object object)调起微信支付

timestamp:当前的时间戳单位秒

package:这里的形式是prepay_id=***这里的prepay_id是统一下单成功后返回的数据结果

signtype:签名方式

paysign:这里是签名也就是前面所说的二次签名这里的签名包含参数有appid(注意这里跟一次签名的属性不同i为大写)传递参数不用,但是必须参与签名,之后就是

noncestr,package=prepay_id=(这里注意需要加上prepay_id=),signtype,timestamp,还有一个key,这是商户的api秘钥,需要参与签名(之前坑在这里),小程序调用支付api ,其他注意事项与第一次签名方式一致