易支付小程序SDK - 提供完整demo与文档
一、概述
易支付小程序 SDK 是为微信小程序量身打造的支付集成工具,开发者可通过简单集成实现订单创建、发起支付、支付回调处理、退款等核心功能,无需深入对接复杂的第三方支付底层接口。支持沙箱测试环境,保障开发测试安全,同时适配个人小程序(需搭配合规收款渠道)与企业小程序。
二、前期准备
1. 账号与资质
2. 开发环境
三、SDK 集成
1. 下载与导入
2. 初始化配置
在小程序入口文件
// app.js
const Yipay = require('./yipay-wxmp/yipay.js');
App({
onLaunch() {
// 初始化易支付SDK
this.yipay = Yipay.init({
mchId: '你的商户ID', // 替换为易支付商户ID
appKey: '你的API密钥', // 替换为易支付API密钥
appId: '你的小程序AppID', // 替换为当前小程序AppID
sandbox: true, // 测试阶段开启沙箱模式,上线时改为false
});
},
globalData: {
yipay: null
}
});四、核心功能 Demo
1. 创建支付订单
发起支付前需先通过 SDK 调用易支付接口创建订单,获取支付凭证。以下为商品购买页创建订单的示例:
// pages/pay/pay.js
const app = getApp();
Page({
data: {
goodsName: '测试商品',
amount: 0.01, // 订单金额(单位:元)
orderId: ''
},
// 输入金额绑定
bindAmountInput(e) {
this.setData({ amount: parseFloat(e.detail.value) });
},
// 创建订单
async createOrder() {
const { goodsName, amount } = this.data;
if (!amount || amount <= 0) {
wx.showToast({ title: '请输入有效金额', icon: 'none' });
return;
}
try {
const res = await app.yipay.createOrder({
outTradeNo: 'ORD' + Date.now(), // 自定义订单号(唯一)
totalFee: amount * 100, // 金额转分为单位
body: goodsName, // 商品描述
notifyUrl: 'https://你的域名/pay/notify', // 支付回调通知地址
attach: '测试订单' // 附加信息,可用于传递自定义数据
});
if (res.code === 0) {
this.setData({ orderId: res.data.orderId });
this.launchPay(res.data.payParams); // 唤起支付
} else {
wx.showToast({ title: res.msg, icon: 'none' });
}
} catch (err) {
wx.showToast({ title: '订单创建失败', icon: 'none' });
console.error('创建订单异常:', err);
}
}
});2. 发起支付
通过
// 续上一段代码,在pay.js中添加
launchPay(payParams) {
wx.requestPayment({
timeStamp: payParams.timeStamp,
nonceStr: payParams.nonceStr,
package: payParams.package,
signType: payParams.signType,
paySign: payParams.paySign,
success: (res) => {
if (res.errMsg === 'requestPayment:ok') {
wx.showToast({ title: '支付成功' });
// 跳转订单详情页
wx.navigateTo({ url: `/pages/order/detail?orderId=${this.data.orderId}` });
}
},
fail: (err) => {
wx.showToast({ title: `支付失败:${err.errMsg}`, icon: 'none' });
},
complete: () => {
// 支付完成后的收尾操作,如关闭加载弹窗
}
});
}3. 支付回调处理
支付完成后,易支付会向初始化时配置的
// 服务端 Node.js Express 示例
const express = require('express');
const router = express.Router();
const Yipay = require('./yipay-node-sdk/yipay.js');
// 初始化服务端SDK
const yipay = Yipay.init({
mchId: '你的商户ID',
appKey: '你的API密钥'
});
// 支付回调接口
router.post('/pay/notify', express.json(), (req, res) => {
const notifyData = req.body;
try {
// 验证回调签名,防止伪造请求
const isVerify = yipay.verifySign(notifyData);
if (!isVerify) {
return res.send('fail');
}
// 签名验证通过,处理订单状态
const { outTradeNo, tradeStatus, totalFee } = notifyData;
if (tradeStatus === 'SUCCESS') {
// 这里编写更新订单状态为“已支付”的逻辑
console.log(`订单${outTradeNo}支付成功,金额${totalFee/100}元`);
}
// 必须返回success,否则易支付会重复发送回调
res.send('success');
} catch (err) {
console.error('回调处理异常:', err);
res.send('fail');
}
});
module.exports = router;4. 订单查询与退款
(1)订单查询
查询指定订单的支付状态,适用于解决支付结果未知的场景,代码如下:
// pages/order/detail.js
const app = getApp();
Page({
data: { orderId: '', orderStatus: '待支付' },
onLoad(options) {
this.setData({ orderId: options.orderId });
this.queryOrder();
},
async queryOrder() {
try {
const res = await app.yipay.queryOrder({
orderId: this.data.orderId // 易支付订单ID
// 也可通过outTradeNo查询:outTradeNo: '自定义订单号'
});
if (res.code === 0) {
const statusMap = {
'UNPAID': '待支付',
'PAID': '已支付',
'REFUNDED': '已退款'
};
this.setData({ orderStatus: statusMap[res.data.tradeStatus] });
}
} catch (err) {
console.error('查询订单失败:', err);
}
}
});(2)退款功能
用户发起退款申请时,调用 SDK 的退款接口,示例如下:
async applyRefund() {
try {
const res = await app.yipay.refund({
orderId: this.data.orderId, // 待退款的订单ID
refundAmount: 0.01, // 退款金额(需≤支付金额)
refundReason: '用户主动退款' // 退款原因
});
if (res.code === 0) {
wx.showToast({ title: '退款申请提交成功' });
} else {
wx.showToast({ title: res.msg, icon: 'none' });
}
} catch (err) {
console.error('退款申请失败:', err);
}
}