uniapp实现支付功能
支付功能实现概述
在UniApp中实现支付功能通常涉及对接微信支付、支付宝等第三方支付平台。需根据平台要求配置参数、调用API并处理回调。
微信支付实现
配置与准备
- 申请微信支付商户账号并获取
appid、mch_id、api_key等参数。 - 在UniApp项目中安装
@dcloudio/uni-pay插件或直接使用uni.request调用微信支付API。
代码示例
// 后端生成支付参数后,前端调用支付
uni.requestPayment({
provider: 'wxpay',
orderInfo: {
appid: 'wx1234567890abcdef', // 微信开放平台审核通过的AppID
partnerid: '1900000109', // 微信支付分配的商户号
prepayid: 'wx201410272009395522657a69032900', // 预支付交易会话ID
package: 'Sign=WXPay', // 固定值
noncestr: '5K8264ILTKCH16CQ2502SI8ZNMTM67VS', // 随机字符串
timestamp: '1514363812', // 时间戳
sign: 'C380BEC2BFD727A4B6845133519F3AD6' // 签名
},
success(res) {
console.log('支付成功:', res);
},
fail(err) {
console.error('支付失败:', err);
}
});
支付宝支付实现
配置与准备
- 注册支付宝开放平台账号并创建应用,获取
app_id、rsa_private_key等参数。 - 配置UniApp项目的支付白名单或使用HBuilderX云打包。
代码示例
uni.requestPayment({
provider: 'alipay',
orderInfo: 'orderInfo', // 由后端生成的支付参数字符串
success(res) {
console.log('支付成功:', res);
},
fail(err) {
console.error('支付失败:', err);
}
});
服务端生成支付参数
支付参数需由服务端生成并签名,确保安全性。以下为Node.js生成微信支付参数的简化示例:

const crypto = require('crypto');
function generateWxPayParams(prepayid) {
const nonceStr = crypto.randomBytes(16).toString('hex');
const timestamp = Math.floor(Date.now() / 1000);
const signStr = `appId=wx1234567890abcdef&nonceStr=${nonceStr}&package=Sign=WXPay&partnerId=1900000109&prepayId=${prepayid}&timeStamp=${timestamp}&key=API_KEY`;
const sign = crypto.createHash('md5').update(signStr).digest('hex').toUpperCase();
return { appid, nonceStr, package: 'Sign=WXPay', partnerid, prepayid, timestamp, sign };
}
注意事项
- 跨平台兼容性:通过
uni.requestPayment自动适配微信、支付宝等平台,无需区分代码。 - 签名验证:所有支付参数必须由服务端签名,避免前端暴露密钥。
- 回调处理:支付结果需通过服务端回调接口验证,不可依赖前端返回结果。
- 沙箱测试:微信和支付宝均提供沙箱环境,建议先测试再上线。
调试与问题排查
- 检查支付参数是否完整且与服务端生成的一致。
- 使用真机调试,部分支付功能在模拟器中无法正常调用。
- 查看控制台日志或支付平台的错误码文档定位问题。
通过以上步骤可实现UniApp的支付功能,需结合具体业务逻辑调整参数和处理流程。






