Maison  >  Article  >  Applet WeChat  >  Explication détaillée du résumé de l'erreur de développement de la fonction de paiement de l'applet WeChat

Explication détaillée du résumé de l'erreur de développement de la fonction de paiement de l'applet WeChat

高洛峰
高洛峰original
2017-03-27 14:06:333050parcourir

Cet article présente principalement des informations pertinentes sur le résumé des erreurs dans le développement de la fonction de paiement du programme WeChat Mini. Les amis dans le besoin peuvent s'y référer

Résumé des erreurs dans le développement de la fonction de paiement de WeChat. Mini programme

Mini programme WeChat J'ai finalement surmonté les pièges du paiement et j'ai découvert qu'il y avait des gouffres assez gros à l'intérieur. Je publie un article maintenant, en espérant que les étudiants qui tomberont dans le piège à l'avenir le pourront. jetez un œil :

https://pay.weixin.qq.com/ wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=2

Le processus métier peut être vu ici lorsque vous regardez le document. Le premier écueil est d'obtenir l'openid de l'utilisateur. Les paramètres doivent être épelés dans l'url de connexion, sinon l'erreur {"errcode":40013,"errmsg":"invalid appid, tips: [ req_id: iil1ba0504ns86 ]"} sera signalée.

 onLoad: function () {
  var that = this
  wx.login({
   success: function (res) {
    if (res.code) {
     //发起网络请求
     wx.request({
      url: 'https://api.weixin.qq.com/sns/jscode2session?appid=wxaacf22345345cfc7162fe3&secret=83ebd41c3e6f34a49b3a34578063434548ff3f71&js_code=' + res.code + '&grant_type=authorization_code',
      method: "POST",
      success: function (res) {
       that.setData({
        openid: res.data.openid
       })
      }
     })
    } else {
     console.log('获取用户登录态失败!' + res.errMsg)
    }
   }
  });
 }

Le deuxième écueil est l'interface unifiée d'ordre de paiement. L'écueil de la signature est un écueil que de nombreuses personnes rencontrent en effet, car le cryptage MD5 est souvent différent de la signature cryptée dans l'outil de signature

Adresse de l'outil de cryptage de signature : https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1


Lors de la signature et du cryptage, il doit être converti en utf-8, pour chiffrer, j'utilise ma propre interface pour chiffrer digest.update(data.getBytes("utf-8"));

 // 统一下单接口获取sign(签名)
 paysignjsapi: function (appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type, key) {
  var self = this;
  //加密签名
  wx.request({
   url: 'http://localhost:8080/XinXingWXApi/wxXcxApi/Md5Encrypt.do',
   method: 'GET',
   data: {
    appid: appid,
    attach: attach,
    body: body,
    mch_id: mch_id,
    nonce_str: nonce_str,
    notify_url: notify_url,
    openid: openid,
    out_trade_no: out_trade_no,
    spbill_create_ip: spbill_create_ip,
    total_fee: total_fee,
    trade_type: trade_type,
    key: key
   },
   //统一下单
   success: function (res) {
    var sign = res.data.strMd5
    var formData = "<xml>"
    formData += "<appid>" + appid + "</appid>" //appid 
    formData += "<attach>" + attach + "</attach>" //附加数据 
    formData += "<body>" + body + "</body>"    //标题
    formData += "<mch_id>" + mch_id + "</mch_id>" //商户号 
    formData += "<nonce_str>" + nonce_str + "</nonce_str>" //随机字符串,不长于32位。 
    formData += "<notify_url>" + notify_url + "</notify_url>" //异步接收微信支付结果通知的回调地址
    formData += "<openid>" + openid + "</openid>"  //用户Id
    formData += "<out_trade_no>" + out_trade_no + "</out_trade_no>" //商户订单号
    formData += "<spbill_create_ip>" + spbill_create_ip + "</spbill_create_ip>"
    formData += "<total_fee>" + total_fee + "</total_fee>" //金额
    formData += "<trade_type>" + trade_type + "</trade_type>"  //公共号支付
    formData += "<sign>" + sign + "</sign>"//签名
    formData += "</xml>"
Retourner l'analyse des données XML

 //请求统一下单接口
    wx.request({
     url: "https://api.mch.weixin.qq.com/pay/unifiedorder",
     method: 'POST',
     data: formData,
     success: function (data) {
      wx.request({
       url: "http://localhost:8080/XinXingWXApi/wxXcxApi/xmlAnalyze.do?strXml=" + data.data,
       method: 'POST',
       success: function (res) {
        var pk = 'prepay_id=' + res.data.prepayId;
        var timeStamp = self.createTimeStamp();
        //获取支付签名,并支付
        self.getsignType(appid, timeStamp, nonce_str, pk, "MD5", key);
       }
      })
     }
    })
   }
  });
 }
Troisièmement, même lors de l'appel de paiement, il existe plusieurs pièges. Le premier est que de nombreux appIds ne peuvent pas être écrits en tant qu'appid. Le deuxième est que le format des paramètres de preoatide doit être écrit correctement. Une erreur de signature de paiement est signalée lors de l'appel du paiement. Vous devez également vous rendre sur l'interface de signature pour vérifier si les signatures sont cohérentes et si les paramètres sont corrects. Lors de l'appel du paiement WeChat, vous devez ajouter l'appId

Merci d'avoir lu. J'espère que cela pourra aider tout le monde. Merci pour votre soutien à ce site !
getsignType: function (appid, timeStamp, nonce_str, pk, signType, key) {
  var that = this;
  wx.request({
   url: "http://localhost:8080/XinXingWXApi/wxXcxApi/getSignType.hn",
   method: 'GET',
   data: {
    appId: appid,
    timeStamp: timeStamp,
    nonceStr: nonce_str,
    pk: pk,
    signType: signType,
    key: key
   },
   success: function (res) {
    console.log(res.data.paySign)
    var paySign = res.data.paySign
    //调用微信支付
    wx.requestPayment({
     'appId': appid,
     'timeStamp': timeStamp,
     'nonceStr': nonce_str,
     'package': pk,
     'signType': 'MD5',
     'paySign': paySign,
     'success': function (res) {
      console.log(res);
      console.log('success');
     },
     'fail': function (res) {
      console.log(res);
      console.log('fail');
     },
     'complete': function (res) {
      // console.log(res);
      console.log('complete');
     }
    });
   }
  })
 }

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn