Heim  >  Artikel  >  WeChat-Applet  >  WeChat-Applet-Entwicklungscode für die Online-Zahlungsfunktion

WeChat-Applet-Entwicklungscode für die Online-Zahlungsfunktion

高洛峰
高洛峰Original
2017-03-16 15:17:512368Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zum Implementierungscode der Online-Zahlungsfunktion der WeChat-Applet-Entwicklung vorgestellt. Freunde, die diese benötigen, können sich auf

Die Online-Zahlungsfunktion des WeChat-Applets

Vor kurzem musste ich die Online-Zahlungsfunktion im WeChat-Miniprogramm nutzen, also habe ich einen Blick auf die offiziellen Dokumente geworfen und festgestellt, dass es sehr praktisch ist, die WeChat-Zahlung im Miniprogramm zu implementieren Wenn Sie schon einmal die WeChat-Zahlung unter einem Dienstkonto entwickelt haben, werden Sie feststellen, dass der Entwicklungsprozess der WeChat-Zahlung im Miniprogramm genau der gleiche ist wie der im Dienstkonto. Jetzt werde ich über den Entwicklungsprozess und die Schwerpunkte von WeChat sprechen Bezahlung im Miniprogramm im Detail.

WeChat-Applet-Entwicklungscode für die Online-Zahlungsfunktion

1. Öffnen Sie die WeChat-Zahlung und das WeChat-Händlerkonto

Dieser Vorgang ist der gleiche wie der WeChat-Zahlungsprozess von Eröffnen eines Dienstkontos Dasselbe, nichts zu sagen.

WeChat-Applet-Entwicklungscode für die Online-Zahlungsfunktion

2. Erhalten Sie die OpenID des Benutzers

Homepage, die wir benötigen, um den Mini-Programm-Client zu verwenden

js, um die OpenID des aktuellen Benutzers abzurufen, indem Sie die Methode wx.login aufrufen. Anschließend verwendet der Entwicklerserver den Anmeldeinformationscode, um die OpenID abzurufen.


wx.login({
   success: function(res) {
    if (res.code) {
     //发起网络请求
     wx.request({
      url: 'https://yourwebsit/onLogin',
      method: 'POST',
      data: {
       code: res.code
      },
      success: function(res) {
        var openid = res.data.openid;
      },
      fail: function(err) {
        console.log(err)
      }
     })
    } else {
     console.log('获取用户登录态失败!' + res.errMsg)
    }
   }
  });


var code = req.param("code");
    request({
      url: "https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code",
      method: 'GET'
    }, function(err, response, body) {
      if (!err && response.statusCode == 200) {
        res.json(JSON.parse(body));
      }
    });

3. Holen Sie sich prepay_id und Zahlungssignaturbestätigung paySign

Der Ablauf dieses Schritts ist der gleiche wie der WeChat-Zahlungsprozess im Dienstkonto, der in Client- und Serverseite unterteilt ist


Werfen wir zunächst einen Blick auf die Client-JS


Im Dienstkonto aktivieren wir die Zahlungsfunktion über den folgenden Code


function jsApiCall()
    {
      WeixinJSBridge.invoke(
        'getBrandWCPayRequest',
        {
          "appId":"",   //公众号名称,由商户传入   
          "timeStamp":"",     //时间戳,自1970年以来的秒数   
          "nonceStr":"", //随机串   
          "package":"prepay_id=<%=prepay_id%>",   
          "signType":"MD5",     //微信签名方式:   
          "paySign":"<%=_paySignjs%>" //微信签名
        },
        function(res){
          WeixinJSBridge.log(res.err_msg);
          if( res.err_msg =="get_brand_wcpay_request:ok"){
            alert("支付成功!");
          }else{
            alert("支付失败!");
          }
        }
      );
    }
Im Miniprogramm aktivieren wir sie über den wx.requestPayment-Methode Zahlungsfunktion. Bevor wir dies tun, müssen wir natürlich zuerst prepay_id erhalten.


 wx.request({
          url: &#39;https://yourwebsit/service/getPay&#39;, 
          method: &#39;POST&#39;,
          data: {
           bookingNo:bookingNo, /*订单号*/
           total_fee:total_fee,  /*订单金额*/
           openid:openid
          },
          header: {
            &#39;content-type&#39;: &#39;application/json&#39;
          },
          success: function(res) {
            wx.requestPayment({
             &#39;timeStamp&#39;:timeStamp,
             &#39;nonceStr&#39;: nonceStr,
             &#39;package&#39;: &#39;prepay_id=&#39;+res.data.prepay_id,
             &#39;signType&#39;: &#39;MD5&#39;,
             &#39;paySign&#39;: res.data._paySignjs,
             &#39;success&#39;:function(res){
               console.log(res);
             },
             &#39;fail&#39;:function(res){
               console.log(&#39;fail:&#39;+JSON.stringify(res));
             }
            })
          },
          fail: function(err) {
            console.log(err)
          }
        })
Das Wichtigste auf der Serverseite ist, prepay_id zu erhalten und paySign zu unterschreiben


 var bookingNo = req.param("bookingNo");
    var total_fee = req.param("total_fee");
    var openid = req.param("openid");
    var body = "费用说明";
    var url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    var formData = "<xml>";
    formData += "<appid>appid</appid>"; //appid
    formData += "<attach>test</attach>";
    formData += "<body>" + body + "</body>";
    formData += "<mch_id>mch_id</mch_id>"; //商户号
    formData += "<nonce_str>nonce_str</nonce_str>";
    formData += "<notify_url>notify_url</notify_url>";
    formData += "<openid>" + openid + "</openid>";
    formData += "<out_trade_no>" + bookingNo + "</out_trade_no>";
    formData += "<spbill_create_ip>spbill_create_ip</spbill_create_ip>";
    formData += "<total_fee>" + total_fee + "</total_fee>";
    formData += "<trade_type>JSAPI</trade_type>";
    formData += "<sign>" + paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, bookingNo, spbill_create_ip, total_fee, &#39;JSAPI&#39;) + "</sign>";
    formData += "</xml>";
    request({
      url: url,
      method: &#39;POST&#39;,
      body: formData
    }, function(err, response, body) {
      if(!err && response.statusCode == 200) {
        var prepay_id = getXMLNodeValue(&#39;prepay_id&#39;, body.toString("utf-8"));
        var tmp = prepay_id.split(&#39;[&#39;);
        var tmp1 = tmp[2].split(&#39;]&#39;);
        //签名
        var _paySignjs = paysignjs(appid, mch_id, &#39;prepay_id=&#39; + tmp1[0], &#39;MD5&#39;,timeStamp);
        var o = {
          prepay_id: tmp1[0],
          _paySignjs: _paySignjs
        }
        res.send(o);
      }
    });
Im Folgenden wird die

Funktion verwendet


function paysignjs(appid, nonceStr, package, signType, timeStamp) {
  var ret = {
    appId: appid,
    nonceStr: nonceStr,
    package: package,
    signType: signType,
    timeStamp: timeStamp
  };
  var string = raw1(ret);
  string = string + &#39;&key=&#39;+key;
  console.log(string);
  var crypto = require(&#39;crypto&#39;);
  return crypto.createHash(&#39;md5&#39;).update(string, &#39;utf8&#39;).digest(&#39;hex&#39;);
};

function raw1(args) {
  var keys = Object.keys(args);
  keys = keys.sort()
  var newArgs = {};
  keys.forEach(function(key) {
    newArgs[key] = args[key];
  });

  var string = &#39;&#39;;
  for(var k in newArgs) {
    string += &#39;&&#39; + k + &#39;=&#39; + newArgs[k];
  }
  string = string.substr(1);
  return string;
};

function paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type) {
  var ret = {
    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
  };
  var string = raw(ret);
  string = string + &#39;&key=&#39;+key;
  var crypto = require(&#39;crypto&#39;);
  return crypto.createHash(&#39;md5&#39;).update(string, &#39;utf8&#39;).digest(&#39;hex&#39;);
};

function raw(args) {
  var keys = Object.keys(args);
  keys = keys.sort()
  var newArgs = {};
  keys.forEach(function(key) {
    newArgs[key.toLowerCase()] = args[key];
  });

  var string = &#39;&#39;;
  for(var k in newArgs) {
    string += &#39;&&#39; + k + &#39;=&#39; + newArgs[k];
  }
  string = string.substr(1);
  return string;
};

function getXMLNodeValue(node_name, xml) {
  var tmp = xml.split("<" + node_name + ">");
  var _tmp = tmp[1].split("</" + node_name + ">");
  return _tmp[0];
}
In nur 3 einfachen Schritten wird hier die WeChat-Zahlungsfunktion des Miniprogramms angeschlossen ist der Test Zahlungsdarstellungen

WeChat-Applet-Entwicklungscode für die Online-Zahlungsfunktion

WeChat-Applet-Entwicklungscode für die Online-Zahlungsfunktion

Vielen Dank fürs Lesen, ich hoffe, es kann allen helfen, vielen Dank für Ihre Unterstützung diese Seite!

Das obige ist der detaillierte Inhalt vonWeChat-Applet-Entwicklungscode für die Online-Zahlungsfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn