uniapp+nodejs实现小程序支付

1.准备商户号、企业级小程序(或者个体工商户级别的)

2.在小程序端调用uni.login获取code,传递给后端

复制代码
uni.login({
			success: loginRes => {
				uni.request({
					url: "http://127.0.0.1:3003/wxpay/pay",
					data: {
						code: loginRes.code
					},
					method: "get",
					success: res => {
						
					},
					fail: err => {
						
					}
				})
			}
		})

3.在nodejs端,

复制代码
let express = require("express");
let router = express.Router();
const WxPay = require('wechatpay-node-v3');
const fs = require('fs');
let api = require("../api/index");
var path = require('path');
let weixinData = require('../utils/weixinData');
const qs = require('querystring')

//根据code查找openid
function getOpenid(code){
    return new Promise((resolve, reject) => {
        let appid = weixinData.Appid
        let secret = weixinData.AppSecret
        let params = {
            appid,
            secret,
            js_code:code
        }
        let formData = qs.stringify(params)
        let openIdUrl = "https://api.weixin.qq.com/sns/jscode2session?" + formData + "&grant_type=authorization_code"
        api.get(openIdUrl).then( res => {
            resolve(res.data.openid)
        })
    })
}

// 创建支付实例
const pay = new WxPay({
    appid: 'wx9fc72986dc9287b6',
    mchid: '1674432158',
    publicKey: fs.readFileSync(path.resolve(__dirname, 'apiclient_cert.pem')), // 公钥
    privateKey: fs.readFileSync(path.resolve(__dirname, 'apiclient_key.pem')), // 秘钥
    key: 'zlc010903zlc010903zlc010903wcpwc'
});

// 订单号生成函数
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;
}

let notify = async (req, res) => {
    // 申请的APIv3
    let key = 'zlc010903zlc010903zlc010903wcpwc';
    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') {
        // 支付成功之后需要进行的业务逻辑
		console.log('支付成功')



    }
}

// 拿到支付所需参数
let payInfo = (req, res) => {
    let { code } = req.query
    //获取openid
    getOpenid(code).then(async resolve => {
        const params = {
            mchid: '1674432158',
            description: '支付测试', // 订单描述
            out_trade_no: randomNumber(), // 订单号,一般每次发起支付都要不一样,可使用随机数生成
            notify_url: 'http://127.0.0.1:3003/wxpay/notify_url',
            amount: {
                total: 1, // 支付金额,单位为分
                currency: 'CNY'
            },
            payer: {
                openid: resolve, // 微信小程序用户的openid,一般需要前端发送过来
            },
            scene_info: {
                payer_client_ip: 'ip', // 支付者ip,这个不用理会也没有问题
            },
        };
        const result = await pay.transactions_jsapi(params);
        // 将结果响应给微信小程序前端
        res.send(result);
    })
    
}

// 回调路由
router.post('/notify_url', notify)
router.get('/pay', payInfo);
module.exports = router
相关推荐
m0_4628038816 小时前
“趣味运动会记分”功能教学指南
小程序
网络安全学习库20 小时前
很喜欢Vue,但还是选择了React: AI时代的新考量
vue.js·人工智能·react.js·小程序·aigc·产品经理·ai编程
叱咤少帅(少帅)21 小时前
Uniapp开发pc端,小程序和APK
小程序·uni-app
2501_915918412 天前
iOS性能测试工具 Instruments、Keymob的使用方法 不局限 FPS
android·ios·小程序·https·uni-app·iphone·webview
Chengbei112 天前
利用 LibreNMS snmpget 配置篡改实现 RCE 的完整攻击链
人工智能·web安全·网络安全·小程序·系统安全
苏灵凯2 天前
智能环境监测终端全栈设计:从单片机到微信小程序,手把手搞定!
单片机·嵌入式硬件·mcu·物联网·微信小程序·小程序·蓝牙模块
nhc0882 天前
贵阳纳海川科技有限公司・货运物流行业解决方案
科技·微信小程序·小程序·软件开发·小程序开发
admin and root2 天前
AWS S3 对象存储攻防&云安全之OSS存储桶漏洞
微信小程序·小程序·渗透测试·云计算·aws·src·攻防演练
取码网2 天前
新版点微同城主题源码34.7+全套插件+小程序前后端 源文件
小程序
2501_915918412 天前
iOS 混淆流程 提升 IPA 分析难度 实现 IPA 深度加固
android·ios·小程序·https·uni-app·iphone·webview