iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >小程序如何统一单接口文档
  • 664
分享到

小程序如何统一单接口文档

2023-06-26 08:06:11 664人浏览 独家记忆
摘要

这篇“小程序如何统一单接口文档”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“小程序如何统一单接口文档”文章吧。在做小程序支付

这篇“小程序如何统一单接口文档”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“小程序如何统一单接口文档”文章吧。

在做小程序支付希望你已经熟读微信的文档微信支付-小程序-手机端和微信支付-小程序-后台。且你已经有了

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

关于上面的这4个数据的获取,请自行在自己的账号中获取和设置。且你已经有了用户的openid。《微信小程序开发(四)获取用户openid》。

小程序接口

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

小程序接口就暴露这一个方法。这个方法有4个参数是需要后台去获取的。
小程序如何统一单接口文档
其实大部分工作都是后台的事情。

后端实现

后端主要是统一下单的这个接口https://api.mch.weixin.qq.com/pay/unifiedorder。
这里主要就是几个签名算法

统一下单签名

// 生成签名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;};

统一下单后端实现

var wxConfig = require('../wx_pay/wx_x_config'); var cryptoMO = require('crypto'); // MD5算法var parseString = require('xml2js').parseString; // xml转js对象var key = wxConfig.Mch_key;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' // 支付成功的回调地址  可访问 不带参数    var nonce_str = getNonceStr(); // 随机字符串    var out_trade_no = wxConfig.getWxPayOrdrID(); // 商户订单号    var total_fee = '1'; // 订单价格 单位是 分    var timestamp = Math.round(new Date().getTime()/1000); // 当前时间    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>'; // 随机字符串    bodyData += '<notify_url>' + notify_url + '</notify_url>'; // 支付成功的回调地址     bodyData += '<openid>' + openid + '</openid>'; // 用户标识    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>';    // 微信小程序统一下单接口    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  这四个参数                    returnValue.nonceStr = result.xml.nonce_str[0]; // 随机字符串                    returnValue.timestamp = timestamp.toString(); // 时间戳                    returnValue.package = 'prepay_id=' + result.xml.prepay_id[0]; // 统一下单接口返回的 prepay_id 参数值                    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代码:

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(); //获取当前毫秒数(0-999)        if(mouth < 10){             mouth = String(String(0) + String(mouth));        }        if(day < 10){             day = String(String(0) + String(day));        }        if(hour < 10){             hour = String(String(0) + String(hour));        }        if(minute < 10){             minute = String(String(0) + String(minute));        }        if(second < 10){             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一个参数      },      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(){      }    })  },

以上就是关于“小程序如何统一单接口文档”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: 小程序如何统一单接口文档

本文链接: https://www.lsjlt.com/news/308235.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 小程序如何统一单接口文档
    这篇“小程序如何统一单接口文档”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“小程序如何统一单接口文档”文章吧。在做小程序支付...
    99+
    2023-06-26
  • 小程序如何监控接口
    小编给大家分享一下小程序如何监控接口,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!小程序新增自定义业务数据监控功能。开发者可自定义监控数据上报,在小程序管理后台配...
    99+
    2023-06-26
  • 在Web API程序中如何使用Swagger做接口文档
    这篇文章主要介绍了在Web API程序中如何使用Swagger做接口文档,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。创建Web API程序在VS2019中创建一个ASP.N...
    99+
    2023-06-03
  • 小程序request接口如何封装
    本文小编为大家详细介绍“小程序request接口如何封装”,内容详细,步骤清晰,细节处理妥当,希望这篇“小程序request接口如何封装”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一:小程序request接口的...
    99+
    2023-06-26
  • 企业小程序订单管理系统解决痛点文档记录
    订单管理系统关于企业订货的痛点和介绍 一:适用行业 适用于批发、生产、代理、加盟。 二:企业销售批发的痛点 在实际业务环境中,无论是厂家,生产,代理,批发,加盟。企业都会有自己的客户,这些客户可能是代理商,固定散客,加盟商等会遇到如下情况。...
    99+
    2023-08-31
    小程序 大数据
  • 小程序云开发如何调用接口
    这篇文章主要讲解了“小程序云开发如何调用接口”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“小程序云开发如何调用接口”吧!下面为大家解读小程序云开发怎么弄开通云开发创建了第一个云开发小程序后,...
    99+
    2023-06-26
  • 微信小程序小游戏开发文档如何写代码
    这篇文章主要讲解了“微信小程序小游戏开发文档如何写代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序小游戏开发文档如何写代码”吧!  小游戏只有以下两个必要文件:  game.js...
    99+
    2023-06-26
  • 微信小程序开发文档如何隐藏控件
    这篇文章主要介绍了微信小程序开发文档如何隐藏控件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序开发文档如何隐藏控件文章都会有所收获,下面我们一起来看看吧。微信小程序开发之隐藏控件的实现方式背景:在小程...
    99+
    2023-06-26
  • 小程序开发中如何获取系统信息同步接口
    这篇文章主要为大家展示了小程序开发中如何获取系统信息同步接口,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“小程序开发中如何获取系统信息同步接口”这篇文章吧。获取系统信息同步接口同步返回参数说明:参...
    99+
    2023-06-26
  • 摇一摇小程序系统如何开发
    这篇文章主要介绍“摇一摇小程序系统如何开发”,在日常操作中,相信很多人在摇一摇小程序系统如何开发问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”摇一摇小程序系统如何开发”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-26
  • 小程序如何封装wx.request请求并创建接口管理文件
    这篇文章主要为大家展示了“小程序如何封装wx.request请求并创建接口管理文件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“小程序如何封装wx.reques...
    99+
    2024-04-02
  • 微信小程序如何通过api接口将json数据展现到小程序
    这篇文章主要介绍了微信小程序如何通过api接口将json数据展现到小程序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如何将接口获取到的数据...
    99+
    2024-04-02
  • 微信小程序uploadFile接口实现文件上传
    目录写在前面创建前端页面写入js事件-完成上传操作配置后端php接口文件实现上传功能完善上传功能写在前面 上节中我们讲到小程序的request请求,掌握了基本的网络请求方式,这节我们...
    99+
    2024-04-02
  • Django如何创作一个简单的最小程序
    通过web框架搭建一个最简易的程序: 第一步:新建一个web框架程序 通过CMD进入到想要创建web程序的文件夹 数据命令django-admin startproject you...
    99+
    2024-04-02
  • 微信小程序中如何实现API接口安全
    这篇文章主要介绍了微信小程序中如何实现API接口安全,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.接口安全的必要性最近我们公司的小程序要...
    99+
    2024-04-02
  • 如何开发制作小程序个人简历开发文档
    这篇文章主要讲解了“如何开发制作小程序个人简历开发文档”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何开发制作小程序个人简历开发文档”吧!  配置项  {  isShowContact:t...
    99+
    2023-06-26
  • 微信小程序如何调用PHP后台接口解析纯html文本
    这篇文章主要为大家展示了“微信小程序如何调用PHP后台接口解析纯html文本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序如何调用PHP后台接口解析纯...
    99+
    2024-04-02
  • uniapp小程序 手机号授权一键登录 小程序接口调用getPhoneNumber java+uniapp
    uniapp 前端 uniapp登录按钮: (在button加上这俩个参数) open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" 微信授权登录 methods方法区...
    99+
    2023-09-28
    uni-app 小程序 微信
  • 如何使用nodejs搭建微信小程序支付接口
    这篇文章主要介绍“如何使用nodejs搭建微信小程序支付接口”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用nodejs搭建微信小程序支付接口”文章能帮助大家解决问题。支付流程一、向后端服务器...
    99+
    2023-07-04
  • 公众号菜单栏如何连接小程序子页面
    1.首先,进入微信公众号官网,登录到微信公众号后台;在公众号首页的功能选项中选择“自定义菜单”;在菜单栏中,随意选择一个菜单,并设置菜单名称;在菜单内容设置中,勾选“跳转小程序”;点击选择小程序,并填写小程序路径和备用网址,保存发布即可;...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作