返回顶部
首页 > 资讯 > 精选 >如何使用nodejs搭建微信小程序支付接口
  • 736
分享到

如何使用nodejs搭建微信小程序支付接口

2023-07-04 20:07:26 736人浏览 独家记忆
摘要

这篇文章主要介绍“如何使用nodejs搭建微信小程序支付接口”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用nodejs搭建微信小程序支付接口”文章能帮助大家解决问题。支付流程一、向后端服务器

这篇文章主要介绍“如何使用nodejs搭建微信小程序支付接口”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用nodejs搭建微信小程序支付接口”文章能帮助大家解决问题。

    支付流程

    一、向后端服务器获取支付所需参数

    二、用获得的参数调用小程序内置的的支付api

    三、在回调的后端接口中处理业务逻辑

    在微信小程序发起支付

    查看微信小程序的官方文档,我们可以查到微信小程序发起支付的api

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

    可以看到这里需要我们携带五个参数( timeStamp, nonceStr,package,signType,,paySign)才能正常发起支付。

    那我们要在哪里才能获取到这些参数呢,这就需要我们的nodejs上场了。

    支付模块

    使用npm安装

    npm i wechatpay-node-v3

    这个包集成了H5、App端的支付能力,更多详细的介绍可以去看一下这个包的官方文档,这里就只介绍在微信小程序的应用。

    引入依赖包

    const WxPay = require('wechatpay-node-v3');const fs = require('fs');const request = require('superagent');const express = require('express');

    其中fs是一个文件处理的内置模块模块,superagent是一个发起请求的模块,若没有的话使用npm提前安装一下,这里就不多做介绍了。因为我们需要搭建一个可供前端请求的接口,我们就需要用到express服务器搭建框架,同样也是需要使用npm提前安装一下的。

    创建支付实例

    const pay = new WxPay({  appid: '你的微信小程序appid',  mchid: '商户号',  publicKey: fs.readFileSync('./apiclient_cert.pem'), // 公钥  privateKey: fs.readFileSync('./apiclient_key.pem'), // 秘钥});

    其中商户号需要凭营业执照才能申请,个人是无法接入微信支付的。

    申请到商户号之后还需要在微信小程序的管理平台关联一下商户号。

    如何使用nodejs搭建微信小程序支付接口

    然后还需要去申请公钥和私钥证书。具体的申请流程可看下方微信官方的文档:微信支付接入前准备

    之后把申请的公钥私钥证书文件放到同级目录下。

    如何使用nodejs搭建微信小程序支付接口

    获取支付参数

    async function payInfo(req,res){const params = {        description: 'Asnull的支付测试', // 订单描述        out_trade_no: '2022080711111111', // 订单号,一般每次发起支付都要不一样,可使用随机数生成        notify_url: 'https://pay.lipux.cn/notify_url',         amount: {          total: 1, // 支付金额,单位为分        },        payer: {          openid: 'drEc8QfY', // 微信小程序用户的openid,一般需要前端发送过来        },        scene_info: {          payer_client_ip: 'ip', // 支付者ip,这个不用理会也没有问题        },    };      const result = await pay.transactions_jsapi(params);      console.log(result);   }

    其中的回调url是当用户成功支付之后微信服务器就会向这个回调url发支付结果的信息,一般我们是在这个回调url里面进行一些支付成功之后的业务处理,而且这个回调url是需要ssl证书认证的也就是Https,且在链接后面不能携带参数。url示例:https://pay.lipux.cn/notify_url

    注意:这个回调url必须能公网访问的哦,不能是本地环境的链接

    由于pay.transactions_jsapi返回的是一个promise对象,因此我们使用async和await函数进行接收结果,其中result就是微信小程序api发起支付所需要的参数。

    result的打印结果:

    {
        appId: 'drEc8QfY',
        timeStamp: '1609918952',
        nonceStr: 'y8aw9vrmx8c',
        package: 'prepay_id=wx0615423208772665709493edbb4b330000',
        signType: 'RSA',
        paySign: 'JnFXsT4VNzlcamtmGoHhziw7JqdnUS9qJ5W6vmAluk3Q2nska7rxYB4hvcl0BTFAB1PBEnHEhCsUbs5zKPEig==
    }

    我们将这个结果使用express中的路由监听res.send()函数发送给前端就可以了。

    然后我们就在前端解析这些数据,放到wx.requestPayment这个微信小程序的api中正式发起支付。

    如果不出意外的话,在微信小程序发起支付这个功能我们就正式实现了

    处理业务逻辑

    上面提到了,回调url就是一个处理支付成功之后的业务逻辑的接口。

    当支付成功之后,微信服务器会向我们这个接口发送一个post请求,这个post请求携带了一些有关支付结果的参数

    支付结果通知是以POST 方法访问商户设置的通知url,通知的数据以JSON 格式通过请求主体(BODY)传输。通知的数据包括了加密的支付结果详情。

    通过官方微信支付文档的上面这个话可知,微信服务器向我们发送的是一段加密的数据,但别担心,这个模块的作者都帮我们解决了。

    我们先来看一下微信服务器都给我们发送了什么数据:

    { "id": "091541fc-6sca-55v8-ab24-653a9v313500", "create_time": "2022-08-07T16:39:06+08:00", "resource_type": "encrypt-resource", "event_type": "TRANSACTION.SUCCESS", "summary": "支付成功", "resource": {  "original_type": "transaction",  "algorithm": "AEAD_AES_256_GCM",  "ciphertext": "tMQPpq3VCxwt56hU2gfsPDJfcfESQ/kzPNmi2xYF0KqMV9ChIWu+n5iVXSVqwgsU9gYSSXeThhp3jm8i9pcrTiOagMxEM/IbJ+MfnN7fkr8Jy2tWOg49N4wy3vB2Qd/nJvD+Jz8K6c4rF8MOasgN+XEriut23sd6EqGUY5zTaKQ+yZC7Q5R+Q6UXa4HlsvHH7+wL6Uz71ZqNyawJ7BYGGh3aXwTu3DHMOullL/IoG3E1nRq1xQRmJsn0li4okegLRuTmlp3vvxZcNgHLOZSCmtdYcRYsZezB2wYdqsT5cCUmRgO8CdgctkGGQIOTjlgaKT8gogP7XUvw1bcFMac4HqUJv2v28mfMTjFzhLNXXWCFDKJDWhCQg2ZTXw0pRJSYe/IiNBpuVsKX7DGahOyYly/Hn321fryiH7mpI5orC6Wb03Mc77hcnL9ALDV0jT8mrmYuB8pAMkxsFNcGcgnp5FrtKcA59CEYc4ccNU26wIiIszB0YIwvirvCEGys3eGStQaytFLvGw5qCmnZ6N5X3GPBOPEQXJa19CrVndWMjBm1PaeyJ/fgfN9mGrsChrToxDg==",  "associated_data": "transaction",  "nonce": "iOO0tvICpQFb" }}

    我们可以看到其中有段信息是被加密了,我们需要解密其中的信息才能进一步的进行我们业务处理。

    解密回调结果

    我们需要通过在回调的路由监听的req.body拿到发送的数据,即上面那一段的json数据,把对应的ciphertext, associated_data, nonce参数传入下面的函数:

    # key 用商户平台上设置的APIv3密钥【微信商户平台—>账户设置—>API安全—>设置APIv3密钥】,记为key;const result = pay.decipher_gcm(ciphertext, associated_data, nonce, key);

    其中的key是APIv3密钥,需要我们去另外申请,具体申请流程请看下面的官方文档:什么是APIv3密钥?如何设置? (qq.com)

    解密成功之后我们就拿到一个新的结果result,打印出来如下:

    { "mchid": "3526524578", "appid": "wxc2n10fbb6065d4f0", "out_trade_no": "2022080711111111", "transaction_id": "8520001545602207282059123413", "trade_type": "JSAPI", "trade_state": "SUCCESS", "trade_state_desc": "支付成功", "bank_type": "OTHERS", "attach": "", "success_time": "2022-08-07T16:55:20+08:00", "payer": {  "openid": "drEc8QfY" }, "amount": {  "total": 1,  "payer_total": 1,  "currency": "CNY",  "payer_currency": "CNY" }}

    其中的out_trade_no就是我们一开始设置的订单号,我们可以在一开始的时候就把这个订单号与我们的用户进行关联,然后在这里就可以通过订单号进行业务处理,比如说充值会员,充值金币等等的操作。

    关于回调通知的具体参数说明可看文档:微信支付-开发者文档 (qq.com)

    到这里,我们已经完成了整个微信小程序支付的流程,不出意外的话你应该可以正常拿到支付的结果

    剩下的就是你的业务逻辑了!

    完整代码

    const WxPay = require('wechatpay-node-v3');const fs = require('fs');const request = require('superagent');const express = require('express');// 创建服务器实例const app = express();// 配置解析表单数据的中间件app.use(express.urlencoded({ extended: false }))app.use(express.json())// 监听端口app.listen(3031, () => {    console.log('服务器启动成功!')})// 创建支付实例const pay = new WxPay({    appid: '你的微信小程序appid',    mchid: '商户号',    publicKey: fs.readFileSync('./apiclient_cert.pem'), // 公钥    privateKey: fs.readFileSync('./apiclient_key.pem'), // 秘钥});// 定义一个获取支付参数路由(get请求)app.get('/pay', payInfo);// 拿到支付所需参数async function payInfo(req, res) {    // 接收前端传过来的openid    let openid = req.params.openid;    const params = {        description: 'Asnull的支付测试', // 订单描述        out_trade_no: randomNumber(), // 订单号,一般每次发起支付都要不一样,可使用随机数生成        notify_url: 'https://pay.lipux.cn/notify_url',        amount: {            total: 1, // 支付金额,单位为分        },        payer: {            openid: openid, // 微信小程序用户的openid,一般需要前端发送过来        },        scene_info: {            payer_client_ip: 'ip', // 支付者ip,这个不用理会也没有问题        },    };    const result = await pay.transactions_jsapi(params);    console.log(result);    // 将结果响应给微信小程序前端    res.send(result);}// 回调路由app.post('/notify_url', async(req, res) => {    // 申请的APIv3    let key = '45c18fdfdgd45f5bc5321201dfdf453f';    let { ciphertext, associated_data, nonce } = req.body.resource;    // 解密回调信息    const result = pay.decipher_gcm(ciphertext, associated_data, nonce, key);    // 拿到订单号    let { out_trade_no } = result;    if (result.trade_state == 'SUCCESS') {        // 支付成功之后需要进行的业务逻辑    }})// 订单号生成函数function randomNumber() {    const now = new Date()    let month = now.getMonth() + 1    let day = now.getDate()    let hour = now.getHours()    let minutes = now.getMinutes()    let seconds = now.getSeconds()    month = month < 10 ? "0" + month : month;    day = day < 10 ? "0" + day : day;    hour = hour < 10 ? "0" + hour : hour;    minutes = minutes < 10 ? "0" + minutes : minutes;    seconds = seconds < 10 ? "0" + seconds : seconds;    let orderCode = now.getFullYear().toString() + month.toString() + day + hour + minutes + seconds + (Math.round(Math.random() * 1000000)).toString();    return orderCode;}

    关于“如何使用nodejs搭建微信小程序支付接口”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: 如何使用nodejs搭建微信小程序支付接口

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

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

    猜你喜欢
    • 如何使用nodejs搭建微信小程序支付接口
      这篇文章主要介绍“如何使用nodejs搭建微信小程序支付接口”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用nodejs搭建微信小程序支付接口”文章能帮助大家解决问题。支付流程一、向后端服务器...
      99+
      2023-07-04
    • 使用nodejs搭建微信小程序支付接口的详细过程
      目录前言支付流程在微信小程序发起支付支付模块使用npm安装引入依赖包创建支付实例获取支付参数处理业务逻辑解密回调结果完整代码最后参考前言 前段时间在开发一个微信小程序的时候需要用到支...
      99+
      2022-12-27
      nodejs接入微信支付 nodejs微信支付 微信小程序支付接口开发
    • 【微信支付】java-微信小程序支付-V3接口
      一、对接前准备 最开始需要在微信支付的官网注册一个商户; 在管理页面中申请关联小程序,通过小程序的 appid 进行关联;商户号和appid之间是多对多的关系 进入微信公众平台,功能-微信支付中确认关联 具体流程请浏览官方文档:接入前准备-...
      99+
      2023-10-27
      微信 微信小程序 小程序
    • Python3 微信支付(小程序支付)V3接口
      起因:         因公司项目需要网上充值功能,从而对接微信支付,目前也只对接了微信支付的小程序支付功能,在网上找到的都是对接微信支付V2版本接口,与我所对接的接口版本不一致,无法使用,特此记录下微信支付完成功能,使用Django完成后...
      99+
      2023-09-12
      微信 小程序 微信小程序
    • Python3微信支付(小程序支付)V3接口的实现
      起因: 因公司项目需要网上充值功能,从而对接微信支付,目前也只对接了微信支付的小程序支付功能,在网上找到的都是对接微信支付V2版本接口,与我所对接的接口版本不一致,无法使用,特此记录...
      99+
      2023-01-17
      Python3 微信支付V3接口 Python3 微信支付
    • 微信小程序支付接口实例分析
      这篇文章主要介绍“微信小程序支付接口实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序支付接口实例分析”文章能帮助大家解决问题。  小程序调起支付API 小程序调起支付数据签名字段列表...
      99+
      2023-06-26
    • 微信小程序中如何实现微信支付
      微信支付是微信公众平台提供的一种在线支付服务,可以为用户提供快速、方便、安全的支付体验。而在微信小程序中实现微信支付,则可以为应用程序提供更多的功能和服务,提高用户体验和商业价值。因此,在本文中,我们将介绍如何在微信小程序中实现微信支付。 ...
      99+
      2023-08-16
      微信小程序 微信 小程序 前端 javascript
    • 微信小程序如何开发微信支付功能
      本篇内容主要讲解“微信小程序如何开发微信支付功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序如何开发微信支付功能”吧!用户请求开发者后台,发起下单请求发起请求前在小程序端调用&nbs...
      99+
      2023-06-26
    • 微信小程序调用支付接口的完整流程记录
      目录当然在开发之前,我们需要有下面这些东西:步骤如下:总结官方的文档路径------》文档路径:developers.weixin.qq.com/miniprogram&hellip...
      99+
      2024-04-02
    • 微信小程序如何使用PHP实现支付功能
      小编给大家分享一下微信小程序如何使用PHP实现支付功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!本文实例为大家分享了微信小程序支付PHP具体代码,供大家参考,具体内容如下服务器端获取 ...
      99+
      2024-04-02
    • 微信小程序接入微信支付实现过程详解
      目录一、基本介绍二、配置信息三、编码实现四、流程总结一、基本介绍 1、支付场景:点击支付按钮唤起微信支付弹窗,输入正确密码后完成支付。 2、基本流程:点击支付按钮首先生成一个订单,然...
      99+
      2022-12-26
      小程序接入微信支付 微信小程序微信支付
    • 如何搭建微信小程序
      今天小编给大家分享一下如何搭建微信小程序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。  准备域名和证书  任务时间:20m...
      99+
      2023-06-26
    • 微信小程序支付功能如何实现
      这篇文章主要介绍了微信小程序支付功能如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序支付功能如何实现文章都会有所收获,下面我们一起来看看吧。微信小程序支付功能开发文档如下:小程序端,保留大部分的...
      99+
      2023-06-26
    • 微信小程序支付功能如何开通
      要开通微信小程序支付功能,您需要完成以下步骤:1. 注册微信支付商户账号:访问微信支付官方网站(pay.weixin.qq.com)...
      99+
      2023-08-16
      微信小程序
    • 如何使用PHP开发微信小程序的支付功能?
      如何使用PHP开发微信小程序的支付功能?随着微信小程序的普及,越来越多的开发者开始关注微信小程序的支付功能。在微信小程序中,用户可以通过支付功能实现购买商品、充值账户等操作。本文将介绍如何使用PHP开发微信小程序的支付功能,并提供具体的代码...
      99+
      2023-10-26
      PHP开发 PHP支付接口 微信小程序支付
    • 微信小程序如何搭建访问node.js接口服务器
      这篇文章将为大家详细讲解有关微信小程序如何搭建访问node.js接口服务器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。搭建教程如下:首先,我试了一下以前的过期的证书,在...
      99+
      2024-04-02
    • 微信小程序如何实现支付及退款
      这篇文章将为大家详细讲解有关微信小程序如何实现支付及退款,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一. 支付支付主要分为几个步骤:前端携带支付需要的数据(商品id,购...
      99+
      2024-04-02
    • 小程序开发中如何发起微信支付
      这篇文章主要为大家展示了小程序开发中如何发起微信支付,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“小程序开发中如何发起微信支付”这篇文章吧。发起微信支付。Object参数说明:参数类型必填说明ti...
      99+
      2023-06-26
    • 微信小程序微信支付接入开发的示例分析
      这篇文章将为大家详细讲解有关微信小程序微信支付接入开发的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。内容如下:一、后台接口封装;二、小程序端整合;三、总结一、后...
      99+
      2024-04-02
    • 微信小程序后端如何搭建
      要搭建微信小程序的后端,可以选择以下几种方式:1. 使用云开发:微信小程序提供了云开发能力,可以直接在小程序中使用云数据库、云函数等...
      99+
      2023-09-20
      微信小程序
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作