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

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

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

    Step2:獲得用戶的 OpenID
    首先,我們需要在小程序的客戶端的邏輯層中,獲取當前用戶的 OpenID。通過調用 wx.login方法,可以得到用戶的code,然后開發者服務器使用登錄憑證code 獲取 openid。
      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));
      }
      });
    Step3:獲取 prepay_id和支付簽名驗證paySign
    這一步的過程,和服務號里的微信支付過程一樣。這個過程區分為客戶端操作,以及服務器端的操作。首先來看一下客戶端邏輯層實現。在服務號里,我們是通過如下的代碼來調起支付功能:
      function jsApiCall() {
      WeixinJSBridge.invoke('getBrandWCPayRequest', {
      "appId": "", //公眾號名稱,由商戶傳入
      "timeStamp": "", //時間戳,自1970年以來的秒數
      "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 方法調起支付功能。當然,在這之前,我們先要獲取 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)
      }
      })
    在服務器端,我們需要實現的是 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);
      }
      });
    下面是用到的函數:
      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) {
    我有話說
    聯系我們
    掃二微碼
    主站蜘蛛池模板: 国产精品一久久香蕉产线看| 国产精品日韩欧美久久综合| 天天爽夜夜爽精品视频app| 亚洲午夜成人精品电影在线观看| 999久久久免费国产精品播放| 精品久久8x国产免费观看| 欧美日韩精品| 国产中文在线亚洲精品官网| 青青青青久久精品国产h| 国内精品久久久久久久97牛牛| 亚州日韩精品专区久久久| 国产欧美日韩精品专区| 国内精品久久九九国产精品| 久久久久久九九99精品 | 国产精品自在线拍国产| 亚洲国产精品成人一区| 久久99精品免费一区二区| 国产高清在线精品一区小说| 国产精品久久亚洲不卡动漫| 久久久久人妻精品一区| 精品无码人妻一区二区三区品| 亚洲日韩国产精品第一页一区| 人妻精品久久久久中文字幕| 精品国产一级在线观看| 国产精品亚洲高清一区二区| 一区二区三区精品| 2021国产成人精品久久| 久久精品国产影库免费看| 国产成人久久精品区一区二区| 精品国产一区二区22| 88国产精品无码一区二区三区| 亚洲国产精品一区二区久久| 欧美精品一区二区三区视频| 国产亚洲欧洲精品| 青青草精品视频| 国产99精品一区二区三区免费| 99久久人人爽亚洲精品美女| 午夜精品久视频在线观看| 在线精品视频播放| 国产精品久久久天天影视香蕉| 国产乱码精品一区二区三|