一级片大奶子_色又黄又爽18禁免费视频_热久久久久久久_久久久精品一区二区_日韩av不卡在线播放_精品国内自产拍在线观看视频

商城系統(tǒng) 注冊

小程序統(tǒng)一下單接口文檔

2020-09-27|HiShop
導(dǎo)讀:小程序支付實現(xiàn)統(tǒng)一下單功能,要怎么來實現(xiàn),下面為大家介紹小程序統(tǒng)一下單接口文檔...

小程序支付實現(xiàn)統(tǒng)一下單功能,要怎么來實現(xiàn),下面為大家介紹小程序統(tǒng)一下單接口文檔

 

在做小程序支付希望你已經(jīng)熟讀微信的文檔微信支付-小程序-手機(jī)端微信支付-小程序-后臺。且你已經(jīng)有了

    AppID: "wx****************",  // 小程序ID  
    Secret: "********************************",  // 小程序Secret
    Mch_id: "**********", // 商戶號
    Mch_key: "********************", // 商戶key

關(guān)于上面的這4個數(shù)據(jù)的獲取,請自行在自己的賬號中獲取和設(shè)置。且你已經(jīng)有了用戶的openid。《微信小程序開發(fā)(四)獲取用戶openid》

小程序接口

wx.requestPayment({
   'timeStamp': '',
   'nonceStr': '',
   'package': '',
   'signType': 'MD5',
   'paySign': '',
   'success':function(res){
   },
   'fail':function(res){
   }
})

小程序接口就暴露這一個方法。這個方法有4個參數(shù)是需要后臺去獲取的。
小程序統(tǒng)一下單接口文檔
其實大部分工作都是后臺的事情。

后端實現(xiàn)

后端主要是統(tǒng)一下單的這個接口https://api.mch.weixin.qq.com/pay/unifiedorder。
這里主要就是幾個簽名算法:

統(tǒng)一下單簽名

// 生成簽名
function paysignjsapi(appid,body,mch_id,nonce_str,notify_url,openid,out_trade_no,spbill_create_ip,total_fee) {
    var ret = {
        appid: appid,
        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: 'JSAPI'
    };
    var str = raw(ret);
    str = str + '&key='+key;
    var md5Str = cryptoMO.createHash('md5').update(str).digest('hex');
    md5Str = md5Str.toUpperCase();
    return md5Str;
};
function raw(args) {
    var keys = Object.keys(args);
    keys = keys.sort(); 
    var newArgs = {};
    keys.forEach(function(key) {
        newArgs[key.toLowerCase()] = args[key];
    });

    var str = '';
    for(var k in newArgs) {
        str += '&' + k + '=' + newArgs[k];
    }
    str = str.substr(1);
    return str;
};

小程序paySign

function paysignjs(appid, nonceStr, package, signType, timeStamp) {
    var ret = {
        appId: appid,
        nonceStr: nonceStr,
        package: package,
        signType: signType,
        timeStamp: timeStamp
    };
    var str = raw1(ret);
    str = str + '&key='+key;
    return cryptoMO.createHash('md5').update(str).digest('hex');
};

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

    var str = '';
    for(var k in newArgs) {
        str += '&' + k + '=' + newArgs[k];
    }
    str = str.substr(1);
    return str;
};

統(tǒng)一下單后端實現(xiàn)

var wxConfig = require('../wx_pay/wx_x_config'); 
var cryptoMO = require('crypto'); // MD5算法
var parseString = require('xml2js').parseString; // xml轉(zhuǎn)js對象

var key = wxConfig.Mch_key;
/*
 * 根據(jù)openid 發(fā)起微信支付  
 */
router.all('/api/wxpay/unifiedorder', function(req, res, next) {
    var param = req.query || req.params; 
    var openid = param.openid;

    var spbill_create_ip = req.ip.replace(/::ffff:/, ''); // 獲取客戶端ip
    var body = '測試支付'; // 商品描述
    var notify_url = 'https://www.hgdqdev.cn/api/wxpay' // 支付成功的回調(diào)地址  可訪問 不帶參數(shù)
    var nonce_str = getNonceStr(); // 隨機(jī)字符串
    var out_trade_no = wxConfig.getWxPayOrdrID(); // 商戶訂單號
    var total_fee = '1'; // 訂單價格 單位是 分
    var timestamp = Math.round(new Date().getTime()/1000); // 當(dāng)前時間

    var bodyData = '<xml>';
    bodyData += '<appid>' + wxConfig.AppID + '</appid>';  // 小程序ID
    bodyData += '<body>' + body + '</body>'; // 商品描述
    bodyData += '<mch_id>' + wxConfig.Mch_id + '</mch_id>'; // 商戶號
    bodyData += '<nonce_str>' + nonce_str + '</nonce_str>'; // 隨機(jī)字符串
    bodyData += '<notify_url>' + notify_url + '</notify_url>'; // 支付成功的回調(diào)地址 
    bodyData += '<openid>' + openid + '</openid>'; // 用戶標(biāo)識
    bodyData += '<out_trade_no>' + out_trade_no + '</out_trade_no>'; // 商戶訂單號
    bodyData += '<spbill_create_ip>' + spbill_create_ip + '</spbill_create_ip>'; // 終端IP
    bodyData += '<total_fee>' + total_fee + '</total_fee>'; // 總金額 單位為分
    bodyData += '<trade_type>JSAPI</trade_type>'; // 交易類型 小程序取值如下:JSAPI
    // 簽名
    var sign = paysignjsapi(
        wxConfig.AppID,
        body, 
        wxConfig.Mch_id, 
        nonce_str,
        notify_url, 
        openid, 
        out_trade_no, 
        spbill_create_ip, 
        total_fee
    );
    bodyData += '<sign>' + sign + '</sign>';
    bodyData += '</xml>';
    // 微信小程序統(tǒng)一下單接口
    var urlStr = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
    request({
        url: urlStr,
        method: 'POST',
        body: bodyData
    }, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            var returnValue = {};
            parseString(body, function (err, result) {
                if (result.xml.return_code[0] == 'SUCCESS') {
                    returnValue.msg = '操作成功';
                    returnValue.status = '100';
                    returnValue.out_trade_no = out_trade_no;  // 商戶訂單號
                    // 小程序 客戶端支付需要 nonceStr,timestamp,package,paySign  這四個參數(shù)
                    returnValue.nonceStr = result.xml.nonce_str[0]; // 隨機(jī)字符串
                    returnValue.timestamp = timestamp.toString(); // 時間戳
                    returnValue.package = 'prepay_id=' + result.xml.prepay_id[0]; // 統(tǒng)一下單接口返回的 prepay_id 參數(shù)值
                    returnValue.paySign = paysignjs(wxConfig.AppID, returnValue.nonceStr, returnValue.package, 'MD5',timestamp); // 簽名
                    res.end(JSON.stringify(returnValue));
                } else{
                    returnValue.msg = result.xml.return_msg[0];
                    returnValue.status = '102';
                    res.end(JSON.stringify(returnValue));
                }
            });
        }
    })
});

wxConfig代碼:


/* 微信參數(shù)AppID 和 Secret */
var wxConfig = {
    AppID: "wx****************",  // 小程序ID  
    Secret: "********************************",  // 小程序Secret
    Mch_id: "**********", // 商戶號
    Mch_key: "********************", // 商戶key
    // 生成商戶訂單號
    getWxPayOrdrID: function(){
        var myDate = new Date();
        var year = myDate.getFullYear();
        var mouth = myDate.getMonth() + 1;
        var day = myDate.getDate();
        var hour = myDate.getHours();
        var minute = myDate.getMinutes();
        var second = myDate.getSeconds();
        var msecond = myDate.getMilliseconds(); //獲取當(dāng)前毫秒數(shù)(0-999)
        if(mouth < 10){ /*月份小于10  就在前面加個0*/
            mouth = String(String(0) + String(mouth));
        }
        if(day < 10){ /*日期小于10  就在前面加個0*/
            day = String(String(0) + String(day));
        }
        if(hour < 10){ /*時小于10  就在前面加個0*/
            hour = String(String(0) + String(hour));
        }
        if(minute < 10){ /*分小于10  就在前面加個0*/
            minute = String(String(0) + String(minute));
        }
        if(second < 10){ /*秒小于10  就在前面加個0*/
            second = String(String(0) + String(second));
        }
        if (msecond < 10) {
            msecond = String(String(00) + String(second));
        } else if(msecond >= 10 && msecond < 100){
            msecond = String(String(0) + String(second));
        }

        var currentDate = String(year) + String(mouth) + String(day) + String(hour) + String(minute) + String(second) + String(msecond);
        return currentDate;
    }
};
module.exports = wxConfig;

實例

// 支付按鈕點擊事件
  payTap: function(){
    var self = this;
    wx.request({
      url: 'https://www.hgdqdev.cn/api/wxpay/unifiedorder',
      data: {
        openid: self.data.openid   // 這里正常項目不會只有openid一個參數(shù)
      },
      success: function(res){
        if(res.data.status == 100){
          var payModel = res.data;
          wx.requestPayment({
            'timeStamp': payModel.timestamp,
            'nonceStr': payModel.nonceStr,
            'package': payModel.package,
            'signType': 'MD5',
            'paySign': payModel.paySign,
            'success': function (res) {
              wx.showToast({
                title: '支付成功',
                icon: 'success',
                duration: 2000
              })
            },
            'fail': function (res) {
            }
          })
        }
      },
      fail: function(){

      }
    })
  },

 

HiShop小程序工具提供多類型商城/門店小程序制作,可視化編輯 1秒生成5步上線。通過拖拽、拼接模塊布局小程序商城頁面,所看即所得,只需要美工就能做出精美商城。更多小程序商店請查看:小程序商店

小程序統(tǒng)一下單接口文檔

電話咨詢 預(yù)約演示 0元開店
主站蜘蛛池模板: 日韩人妻无码精品=a片免费不卡|国产亚洲综合99久久系列|国产影视精品一区二区三区|午夜理论片一级毛片免费|亚洲,国产,欧美在线|久久曰视频 | #NAME?|国产欧美精品久久久|欧产日产国产水蜜桃|亚色国产|国产=aV无码专区亚洲=aV毛片搜|久操久操 | 神马国产精品|国产丝袜91久久久久久久久久久|亚洲人成在线播放网站|国产8区|四虎永久在线精品免费网址|近伦毛片中文字幕免费的 | 五月婷婷在线观看视频|国产熟女精品视频国语|97亚洲欧美国产网曝97|91中文精品|高潮迭起=av乳颜射后入|国产91精品久久久 | 中文乱码人妻一区二区三区视频|亚洲高清专区|中文毛片无遮挡高潮免费|黄人成=a动漫片免费网站|99re在线免费|女乱淫免费看视频大黄 | 亚洲=aV无码成人精品区在线播放|亚洲熟妇=av综合网五月|超粉嫩00无码福利视频|噜噜噜久久亚洲精品国产品麻豆|国产精品一区二区97|日本精品在线视频 | 在线看免费观看=av|十九岁大学生日本在线播放|91在线看视频|欧美日韩国产综合新一区|韩日黄色毛片|刘亦菲精品国产亚洲人成 | 亚洲精品第一页|边吃吃奶边扎下面很紧爽|porno麻豆|五月天婷五月天综合网|国产精品理论在线无码|国产资源网站 | 91=av爱爱|黄频视频大全免费的国产|日本亚洲一区二区|c=aoporn超碰地址进入|黄色在线免费观看视频|精品国产乱码久久久久久芒果 | 日韩精品成人=av|午夜精品一区二区三区免费视频|亚洲精品国产综合久久一线|国产三级=aV在在线观看|GV无码免费无禁网站男男|欧美videos另类极品 | 尤物午夜在线|97插插插|欧美成人一区二区三区在线视频|国产一级片精品|亚洲毛片亚洲毛片亚洲毛片|91免费视频观看 | 日韩美女啪啪|911久久|国产男女性潮高清免费网站|亚洲国产精品精华液=ab|国产精品视频自拍|毛片在线观看视频 | 日操夜干|久久综合日|91无遮挡无码国产在线播放|亚洲视频免费网站|波多野结衣在线视频观看|亚洲国产欧美精品 | 69视频在线观看|不卡的=av在线播放|羞羞色男人的天堂|蜜臀=av夜夜澡人人爽人人|一区二区三区黄|成年人在线免费网站 色一色成人网|久草在线影|精品视频在线观看99|国产香蕉尹人视频在线|亚洲=a∨好看=av高清在线观看|亚洲欧美日本在线 | 91=av免费看|久久久夜色|免费在线观看日韩|2020亚洲天堂|中国毛茸茸性XXXX|国产精品女人久久久久久 | 亚洲成人伦理|国产在线一|91超碰碰|小s=ao货水好多真紧h无码视频|久久亚洲精精品中文字幕|欧美日韩午夜精品 | 精品乱久久|www亚洲成人|麻豆91爱爱|99日韩精品|免费看日韩大片|国产精品视频一区视频二区 | 成人=av一区二区三区在线观看|欧美日韩中文字幕一区二区三区|#NAME?|青青草视频网|日韩=av在线一区二区三区|老司机在线精品视频播放 | 亚洲国产一区在线观看|免费=a级伦费影视在线观看|日本在线不卡一区二区三区|91在线免费视频观看|俄罗斯=a级毛片|丁香五月开心婷婷综合中文 | j=ap=anese护士高潮|12裸体自慰免费观看网站|免费=a一毛片|欧美人禽zozo动人物杂交|h动漫在线女生向在线精品|狠狠躁夜夜躁人人爽天天2020 | 日日爱99|欧美成人黄激情免费视频|16—17女人毛片毛片同性|国产黄色免费片|久久久久国产精|欧美精品久久 | #NAME?|国产欧美精品久久久|欧产日产国产水蜜桃|亚色国产|国产=aV无码专区亚洲=aV毛片搜|久操久操 | 成年人在线观看视频网站|亚洲影视久久|亚洲成在人网站无码天堂|国产色91在线|国产精品无人区一区二区三区|免费看=a在线观看 | 午夜特片|中文久久久久|亚洲精品美女色诱在线播放|大地资源在线观看视频在线|99久久婷婷国产综合精品免费|豪放女大兵免费观看bd www欧美精品|成全在线观看免费高清动漫|富婆推油偷高潮叫嗷嗷叫|久久做受WWW|韩国羞羞|日韩亚洲欧美中文三级 | 男同免费|久久久久久草莓香蕉步兵|亚洲女女女同性VIDEO|免费的=av不用播放器的|黄频网站在线观看|久久久88 | 一区二区三区日韩视频在线观看|日韩欧美在线观看一区|91精品一区二区三区久久|FREEZEFR=aME丰满人妻|亚洲=aV无码一区二区二三区|欧美综合区自拍亚洲综合绿色 | 二区视频在线|久久99精品久久久野外观看|国产欧美日韩一区二区三区在线观看|久久国产色=av免费看|樱花草在线播放免费中文|亚洲最新版=aV无码中文字幕 | #NAME?|中文视频一区|亚洲第一=av男人的天堂|精品成人=av|日韩高清dvd碟片|日韩精品资源在线观看 | c=aopom成人免费公开视频|中文字幕欧美人妻精品一区|91九幺丨成人|日韩久久国产|三年片大全免费观看|久草在在线 | 91美女视频|c=aoporm在线|狠狠色噜噜狠狠米奇777|欧美一级做一级爱=a做片性|亚洲=aV噜噜狠狠网址蜜桃|亚洲v=a一区二区 | 国产精品成人v=a在线观看|久久网中文字幕|国产精品2区|色费色情人成视频|国产精品一区二区丝瓜|国产亚洲精品自在久久77 | 轻轻草在线观看|国产美女遭强高潮网站|色综合视频在线观看|久久久久久久久久久久久久久|www久久艹|久久国产传媒 | 成人无码区免费=aⅴ片www老师|男人天堂网址|国产一片|国产第一福利影院|一本久道中文无码字幕=av|毛片视频播放 | 福利综合网|成年人网站黄色|欧美大陆国产|日韩视频在线免费|精品国产一区二区三区久久久久久|奇米超碰在线 | 午夜老司机免费视频|久久久国产精品免费=a片|奇米影视7777|八戒理论片午影院无码爱恋|国产91视频免费看|国产精品久久久久久久不卡 | 18禁超污无遮挡无码网址极速|国产精品久久久久久久久久三级|91大神暴力调教|成人久久久久久久久|久久久人成影片免费观看|欧美精品成人一区二区三区四区 | 亚洲=aV无码成人精品区在线播放|亚洲熟妇=av综合网五月|超粉嫩00无码福利视频|噜噜噜久久亚洲精品国产品麻豆|国产精品一区二区97|日本精品在线视频 | 69xxxx国产|一级一片|久久久久97|亚洲日本v=a午夜中文字幕|狠狠干伊人网|国产人妻精品区一区二区三区 | 国产一区二区三区精品久久久|欧美午夜一区二区|久草新免费|91=av成人|男人午夜在线|亚洲欧美国产vr在线观 | 亚洲国产一区在线观看|免费=a级伦费影视在线观看|日本在线不卡一区二区三区|91在线免费视频观看|俄罗斯=a级毛片|丁香五月开心婷婷综合中文 | 国产=a三级三级三级看三级|不卡中文|国产免费午夜福利757|h在线视频|熟女人妻=aV完整一区二区三区|J=aP=aN白嫩丰满人妻VIDEOS |