uniapp接入云闪付
接入云闪付前的准备
在UniApp中接入云闪付支付功能前,需要确保已完成以下准备工作:
注册并登录云闪付开发者平台,创建应用获取AppID、商户号(MID)和密钥(Key)等必要参数。
确保UniApp项目已配置好相关支付模块的权限和依赖,例如在manifest.json中配置支付权限。
配置UniApp项目
在UniApp项目的manifest.json文件中,添加云闪付的相关配置。具体配置项包括AppID、MID等,确保与云闪付开发者平台获取的信息一致。
"app-plus": {
"payment": {
"unionpay": {
"appid": "你的云闪付AppID",
"mid": "你的商户号"
}
}
}
调用云闪付支付接口
在需要调用云闪付支付的地方,使用UniApp提供的API进行支付请求。以下是一个示例代码:
uni.requestPayment({
provider: 'unionpay',
orderInfo: {
tn: '交易流水号', // 从服务器获取的交易流水号
mode: '00' // 支付模式,00为正式环境
},
success: function(res) {
console.log('支付成功', res);
},
fail: function(err) {
console.log('支付失败', err);
}
});
服务器端生成交易流水号
云闪付支付需要服务器端生成交易流水号(TN),通常通过调用云闪付的统一下单接口实现。服务器端代码示例(Node.js):
const axios = require('axios');
const crypto = require('crypto');
const generateTN = async (orderId, amount) => {
const params = {
merId: '你的商户号',
orderId: orderId,
txnAmt: amount,
txnTime: new Date().toISOString().replace(/[-:T.]/g, '').slice(0, 14),
currency: '156',
frontUrl: '你的前端回调URL',
backUrl: '你的后端回调URL'
};
const signStr = Object.keys(params).sort().map(key => `${key}=${params[key]}`).join('&');
const sign = crypto.createHash('sha256').update(signStr + '你的密钥').digest('hex');
const response = await axios.post('https://网关地址', { ...params, signature: sign });
return response.data.tn;
};
处理支付回调
支付完成后,云闪付会将支付结果异步通知到配置的后端回调URL。后端需要验证签名并处理支付结果:
const handleCallback = (req, res) => {
const { signature, ...params } = req.body;
const signStr = Object.keys(params).sort().map(key => `${key}=${params[key]}`).join('&');
const localSign = crypto.createHash('sha256').update(signStr + '你的密钥').digest('hex');
if (localSign === signature) {
// 验证通过,处理支付结果
console.log('支付结果', params);
res.send('success');
} else {
res.status(400).send('签名验证失败');
}
};
测试与上线
在开发阶段,可以使用云闪付提供的沙箱环境进行测试。确保支付流程无误后,切换到生产环境并提交审核。

测试时需注意交易流水号的生成和签名验证是否正常,确保支付成功和失败的回调处理逻辑正确。






