小程序微信支付发起订单node.js版

这篇具有很好参考价值的文章主要介绍了小程序微信支付发起订单node.js版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自己闲来无事想试试node.js如何写后端开发,就测试了一下这个微信支付功能,首先,我们想要实现微信支付要有appid,mchid商户号,这些提前需要准备的必要参数我就不多说了,看文档就可APP下单 - App支付 | 微信支付商户文档中心 (qq.com)

下面直接上代码

//我们前端通过调用buy这个接口,告诉后端去发起下单请求

router.post('/buy', (req, res) => {

    let total = 1 

    let out_trade_no = buildShortUUID()  //生成随机字符串方法

   //这是我们需要必传的参数,使用自己的就可

    let requestbody = {

        "appid": appid,

        "mchid": mchid,

        "out_trade_no": out_trade_no,

        "description": "商品",

        "amount": {

            "total": total,

        },

        "notify_url": "http://10.70.23.35/static/index.html",

        "payer": {

            "openid": req.body.openid

        }

    }

    let nonce_str = buildShortUUID() //生成第二个随机字符串

    let data = Math.round(new Date().getTime() / 1000)  //!!!重点 获取时间戳  js获取时间戳是以毫秒为单位所以这里要特别注意!!!这里的时间戳使用变量记录下来,因为后面还会用

    const jsrsasign = require('jsrsasign'); // npm 下载 jsrsasign 加密插件

    let rsa = new jsrsasign.RSAKey()

  // 私钥 !!!注意 这里的私钥是你微信商户平台中 证书里的私钥,每个人是不一样的  

如何获取 可查看文档 如何下载微信支付证书(API证书)_微信支付证书一般放在哪个文件夹-CSDN博客

下载完后我们可直接查看apiclient_key.pem文件,这里就是我们自己的私钥!!!

    let priK = "-----BEGIN PRIVATE KEY-----\n" +

        "xxxxxxxxxxxxxxxxxx\n" +

      "xxxxxxxxxxxxxxxxxxx\n" +

        "-----END PRIVATE KEY-----";

    // 将私钥 转成16进制

    rsa = jsrsasign.KEYUTIL.getKey(priK);

    // 采用SHA256withRSA进行加密

    const sig = new jsrsasign.KJUR.crypto.Signature({

        alg: 'SHA256withRSA'

    })

    // 算法初始化

    sig.init(rsa)

str为微信规定的签名方式注意,微信文档中只是个例子,你想用下单接口就需要根据我下面的写,

请求方式为 post,

请求地址为v3/pay/transactions/jsapi

请求时间戳 是上面记录的时间戳data

随机字符串是上面记录的nonce_str

最后将 参数body使用JSON.stringify()方法传入

    let str = `POST\n/v3/pay/transactions/jsapi\n${data}\n${nonce_str}\n${JSON.stringify(requestbody)}\n`

    // 对str进行加密

    sig.updateString(str)

    // 加密后的16进制转成base64,这就是签名了

    const sign = jsrsasign.hextob64(sig.sign())

//到了这步才是发起下单请求,之前全是准备工作

    request({

        url: 'https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi',

        method: "POST",

        json: true,

        headers: {

            "Accept": "application/json",

            "User-Agent": "Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/63.0.3239.132 Safari/537.36",

            "Authorization": `WECHATPAY2-SHA256-RSA2048 mchid="${mchid}",serial_no="${serial_no}",nonce_str="${nonce_str}",timestamp="${data}",signature="${sign}"`,

            "Content-Type": "application/json",

        },

        body: requestbody

    }, function (error, response, body) {

//成功打印body中的prepay_id就代表下单成功了,可以进行下一步的发起支付了 就没有难点了

        console.log(body)

    });

})

下面是完整代码:文章来源地址https://www.toymoban.com/news/detail-815184.html

 let total = 1
    let out_trade_no = buildShortUUID()
    let requestbody = {
        "appid": appid,
        "mchid": mchid,
        "out_trade_no": out_trade_no,
        "description": "商品",
        "amount": {
            "total": total,
        },
        "notify_url": "http://10.70.23.35/static/index.html",
        "payer": {
            "openid": req.body.openid
        }
    }

    let nonce_str = buildShortUUID()
    let data = Math.round(new Date().getTime() / 1000)

    const jsrsasign = require('jsrsasign');
    // 私钥

    let rsa = new jsrsasign.RSAKey()
    let priK = "-----BEGIN PRIVATE KEY-----\n" +
       
        "56xdvb7rN2fR/49CUSZ1f/I=\n" +
        "-----END PRIVATE KEY-----";

    // 将私钥 转成16进制
    rsa = jsrsasign.KEYUTIL.getKey(priK);
    // 采用SHA256withRSA进行加密
    const sig = new jsrsasign.KJUR.crypto.Signature({
        alg: 'SHA256withRSA'
    })
    // 算法初始化
    sig.init(rsa)
    let str = `POST\n/v3/pay/transactions/jsapi\n${data}\n${nonce_str}\n${JSON.stringify(requestbody)}\n`
    // 对123456进行加密
    sig.updateString(str)
    // 加密后的16进制转成base64,这就是签名了
    const sign = jsrsasign.hextob64(sig.sign())

    request({
        url: 'https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi',
        method: "POST",
        json: true,
        headers: {
            "Accept": "application/json",
            "User-Agent": "Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/63.0.3239.132 Safari/537.36",
            "Authorization": `WECHATPAY2-SHA256-RSA2048 mchid="${mchid}",serial_no="${serial_no}",nonce_str="${nonce_str}",timestamp="${data}",signature="${sign}"`,
            "Content-Type": "application/json",
        },
        body: requestbody
    }, function (error, response, body) {
        console.log(body)
    });

到了这里,关于小程序微信支付发起订单node.js版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微信小程序源码】独立版云贝餐饮连锁V2_2.3.9源码线传小程序,新增堂食订单,支付打印新增下单时间显示

    百度网盘:https://pan.baidu.com/s/150WZX2gN_QM9nyIQAOpuXA?pwd=gzm0  提取码:gzm0 版本:2.9.4 备注: 不需要上传小程序 云贝餐饮连锁V2、云贝多端餐饮外卖连锁版、自助点单系统、餐饮外卖小程序、微信小程序、餐饮小程序 PHP+MYSQL+小程序 CentOS Linux 7.6.1810 (Core)、运行环境:宝塔 Linux v7

    2024年02月09日
    浏览(48)
  • java微信支付v3系列——6.微信支付查询订单API

    java微信支付v3系列——1.微信支付准备工作 java微信支付v3系列——2.微信支付基本配置 java微信支付v3系列——3.订单创建准备操作 java微信支付v3系列——4.创建订单的封装及使用 java微信支付v3系列——5.微信支付成功回调 java微信支付v3系列——6.微信支付查询订单API java微信支

    2023年04月08日
    浏览(37)
  • Node.js 发起HTTP请求的5种方式

    HTTP(百度百科):   超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;         可以直接用这个模块来发起 HTT

    2024年02月21日
    浏览(42)
  • 03、SpringBoot + 微信支付 ---- 创建订单、保存二维码url、显示订单列表

    1-1:需求: 之前的下单,只是获取支付二维码,但是并没有将订单存到数据库 需求1:点击确认支付后,创建商品的订单存到数据库 需求2:每次确认支付之前,要判断这个人是否存在已下单未支付的订单,有的话就不用再创建订单了,把他的订单查询出来给他就行。 1-2:代

    2024年02月05日
    浏览(48)
  • 微信3.7版小程序数据分析

    mitmproxy的使用 mitmproxy监听不到小程序(3.7以前可以用) 随着微信防爬技术的再度升级,之前Python+mitmproxy利用网络代理这种中间人的方式已经爬取不到微信小程序的数据了。俗话世上无难事只要肯放弃,本以为已经无计可施了,在某天不经意间发现一个神器依然可以抓到小程序

    2024年02月11日
    浏览(29)
  • 支付宝,对接沙箱支付(vue2+node.js)

    支付宝沙箱环境,点击进入 1. 扫码登录,进入后如图 2. 进入沙箱,可以看到自己的账号(如下配置) 配置系统默认密钥(需要下载工具) 密钥下载工具配置 依照自己系统,自行选择下载 配置支付宝开放平台密钥工具 生成密钥后,不要关闭程序,在页面沙箱哪里配置系统密

    2024年02月05日
    浏览(65)
  • 微信小程序搭载node.js服务器(简)

    此文章用到的是用node.js搭载的服务器! 检测电脑是否安装node.js,可以用【 cmd/Power shell 】命令检测,也可以用【git-bash】,这里就用git-bash进行演示,没有git-bash可以安装一下。 如果有对应的版本号即为已经安装完成! 未安装的附上链接了: node.js安装 : Download | Node.js Gi

    2023年04月08日
    浏览(50)
  • (附源码)node.js+mysql+node基于微信小程序的校园失物招领小程序 毕业设计072343

    随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序的校园失物招领系统被用户普遍使用,为方便用户能够可以随时进行微信小程序的校园失物招领系

    2024年01月23日
    浏览(50)
  • 基于Node.js的酒店民宿微信小程序的设计与开发

    摘要 随着移动互联网的普及和人们生活水平的提升,旅游住宿需求日益旺盛。酒店和民宿作为主要的住宿方式,在市场上的竞争也愈发激烈。微信小程序作为一种轻量级、易推广的移动应用形态,为酒店民宿行业提供了全新的服务模式和营销渠道。本文详细阐述了基于Node.

    2024年02月21日
    浏览(48)
  • uniapp+node.js+mysql前后端微信小程序授权登录

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一、前端代码? 1.微信授权登录的页面(没有样式,自己写) 2.”我的“页面 3.封装request.js的页面 4.vuex的状态管理的页面 5.添加了识别有放token的没有登录就自动跳转登录

    2024年02月09日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包