<tfoot id="ywk22"></tfoot>
<abbr id="ywk22"><sup id="ywk22"></sup></abbr>

  • <ul id="ywk22"></ul>
  • COURSE 小程序教程 我們的作品,他們的故事
    Our work, their stories
    微信小程序接入微信支付方法
    發(fā)布人:龍兵科技 17-05-17
    微信小程序開發(fā)出來后,想要用在線支付功能怎么辦?畢竟在小程序里面實現(xiàn)微信支付的話還是會帶來很大的便捷的。有過開發(fā)服務(wù)號下微信支付經(jīng)驗的親會發(fā)現(xiàn),其實小程序里的微信支付和服務(wù)號里面的開發(fā)過程很像。
    那么具體過程是怎樣的呢?移步到微種草君七嬤嬤帶你瞧瞧:
    Step1:開通微信支付和微信商戶號

    這個過程幾乎就和開通服務(wù)號的微信支付一樣。

    Step2:獲得用戶的 OpenID
    首先,我們需要在小程序的客戶端的邏輯層中,獲取當前用戶的 OpenID。通過調(diào)用 wx.login方法,可以得到用戶的code,然后開發(fā)者服務(wù)器使用登錄憑證code 獲取 openid。
      wx.login({
      success: function (res) {
      if (res.code) {
      //發(fā)起網(wǎng)絡(luò)請求
      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('獲取用戶登錄態(tài)失敗!' + 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));
      }
      });
    Step3:獲取 prepay_id和支付簽名驗證paySign
    這一步的過程,和服務(wù)號里的微信支付過程一樣。這個過程區(qū)分為客戶端操作,以及服務(wù)器端的操作。首先來看一下客戶端邏輯層實現(xiàn)。在服務(wù)號里,我們是通過如下的代碼來調(diào)起支付功能:
      function jsApiCall() {
      WeixinJSBridge.invoke('getBrandWCPayRequest', {
      "appId": "", //公眾號名稱,由商戶傳入
      "timeStamp": "", //時間戳,自1970年以來的秒數(shù)
      "nonceStr": "", //隨機串
      "package": "prepay_id=",
      "signType": "MD5", //微信簽名方式:
      "paySign": "" //微信簽名
      }, function (res) {
      WeixinJSBridge.log(res.err_msg);
      if (res.err_msg == "get_brand_wcpay_request:ok") {
      ;
      }
      else {
      ;
      }
      });
      }
    在小程序里,我們是通過 wx.requestPayment 方法調(diào)起支付功能。當然,在這之前,我們先要獲取 prepay_id。
      wx.request({
      url: 'https://yourwebsit/service/getPay',
      method: 'POST',
      data: {
      bookingNo: bookingNo,
      total_fee: total_fee,
      openid: openid
      },
      header: {
      'content-type': 'application/json'
      }, success: function (res) {
      wx.requestPayment({
      'timeStamp': timeStamp
      , 'nonceStr': nonceStr
      , 'package': 'prepay_id=' + res.data.prepay_id
      , 'signType': 'MD5'
      , 'paySign': res.data._paySignjs
      , 'success': function (res) {
      console.log(res);
      }
      , 'fail': function (res) {
      console.log('fail:' + JSON.stringify(res));
      }
      })
      },
      fail: function (err) {
      console.log(err)
      }
      })
    在服務(wù)器端,我們需要實現(xiàn)的是 prepay_id 的獲取,以及簽名 paySign 的獲取。
      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 = "";
      formData += "appid"; //appid
      formData += "test";
      formData += "" + body + "";
      formData += "mch_id"; //商戶號
      formData += "nonce_str";
      formData += "notify_url";
      formData += "" + openid + "";
      formData += "" + bookingNo + "";
      formData += "spbill_create_ip";
      formData += "" + total_fee + "";
      formData += "JSAPI";
      formData += "" + paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, bookingNo, spbill_create_ip, total_fee, 'JSAPI') + "";
      formData += "";
      request({
      url: url,
      method: 'POST',
      body: formData
      }, function (err, response, body) {
      if (!err && response.statusCode == 200) {
      var prepay_id = getXMLNodeValue('prepay_id', body.toString("utf-8"));
      var tmp = prepay_id.split('[');
      var tmp1 = tmp[2].split(']');
      //簽名
      var _paySignjs = paysignjs(appid, mch_id, 'prepay_id=' + tmp1[0], 'MD5', timeStamp);
      var o = {
      prepay_id: tmp1[0]
      , _paySignjs: _paySignjs
      }
      res.send(o);
      }
      });
    下面是用到的函數(shù):
      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 + '&key=' + key;
      console.log(string);
      var crypto = require('crypto');
      return crypto.createHash('md5').update(string, 'utf8').digest('hex');
      };
      function raw1(args) {
      var keys = Object.keys(args);
      keys = keys.sort()
      var newArgs = {};
      keys.forEach(function (key) {
      newArgs[key] = args[key];
      });
      var string = '';
      for (var k in newArgs) {
      string += '&' + k + '=' + 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 + '&key=' + key;
      var crypto = require('crypto');
      return crypto.createHash('md5').update(string, 'utf8').digest('hex');
      };
      function raw(args) {
      var keys = Object.keys(args);
      keys = keys.sort()
      var newArgs = {};
      keys.forEach(function (key) {
      newArgs[key.toLowerCase()] = args[key];
      });
      var string = '';
      for (var k in newArgs) {
    我有話說
    聯(lián)系我們
    掃二微碼
    主站蜘蛛池模板: 国产在线不卡午夜精品2021| 青青草国产精品久久久久| 久久国产乱子伦精品免费午夜| 国产高清国内精品福利99久久| 麻豆精品久久久一区二区| 国产精品无码国模私拍视频 | 日韩精品欧美国产在线| 亚洲热线99精品视频| 国产a∨精品一区二区三区不卡| 久热这里只精品99re8久| 国产精品日韩欧美在线第3页| 亚洲精品国产精品乱码不卡| 国产在线精品免费aaa片| 97久久精品人人澡人人爽| 麻豆国产高清精品国在线| 九九精品99久久久香蕉| 国产精品久操视频| 奇米影视7777久久精品| 国产精品美女久久久久av爽 | 国模精品一区二区三区| 中文字幕精品一区二区精品| 四虎国产精品永久地址99新强| 伊人久久无码精品中文字幕| …久久精品99久久香蕉国产| 欧美成人精品欧美一级乱黄一区二区精品在线 | 国产精品单位女同事在线| 无码人妻精品中文字幕免费 | 国产女主播精品大秀系列| 久久久久99精品成人片三人毛片| 国精无码欧精品亚洲一区| 久久99亚洲综合精品首页| 成人午夜精品网站在线观看 | 精品无码国产自产拍在线观看| 国产伦精品一区二区三区视频猫咪| 精品国产VA久久久久久久冰| 蜜臀精品国产高清在线观看| 91精品国产91热久久久久福利| freesexvideos精品老师毛多| 中文字幕在线亚洲精品| 久久久亚洲精品蜜桃臀| 国产高清一级毛片精品|