易支付安全、低费率、实时到账

易支付小程序SDK - 提供完整demo与文档

一、概述

易支付小程序 SDK 是为微信小程序量身打造的支付集成工具,开发者可通过简单集成实现订单创建、发起支付、支付回调处理、退款等核心功能,无需深入对接复杂的第三方支付底层接口。支持沙箱测试环境,保障开发测试安全,同时适配个人小程序(需搭配合规收款渠道)与企业小程序。

二、前期准备

1. 账号与资质

  1. 注册易支付商户账号,完成实名认证(企业商户上传营业执照,个人商户提供身份证等信息)。

  2. 登录易支付商户后台,获取核心配置参数:商户 ID(MchID)API 密钥(AppKey)小程序 AppID ,这些参数用于 SDK 身份验证。

2. 开发环境

  1. 微信开发者工具(最新稳定版)。

  2. 小程序基础库版本 ≥ 2.20.0。

  3. 开通小程序 wx.request 接口权限,且配置易支付域名到小程序 “request 合法域名” 中。

三、SDK 集成

1. 下载与导入

  1. 从易支付官方开发者平台下载小程序 SDK 压缩包,解压后得到yipay-wxmp文件夹,包含核心文件yipay.js和config.js。

  2. yipay-wxmp文件夹复制到小程序项目根目录下。

2. 初始化配置

在小程序入口文件app.js中初始化 SDK,配置商户参数,代码如下:

// 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. 发起支付

通过wx.requestPayment接口唤起微信支付,参数由订单创建接口返回,示例如下:

// 续上一段代码,在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. 支付回调处理

支付完成后,易支付会向初始化时配置的notifyUrl发送异步回调通知,用于同步支付状态。需在服务端(如 Node.js/Java)编写回调接口,以下是 Node.js(Express 框架)的 Demo:

// 服务端 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);
  }
}

五、沙箱测试

  1. SDK 初始化时设置sandbox: true即可接入沙箱环境。

  2. 沙箱环境支持模拟支付成功、失败、超时等场景,不产生真实交易。

  3. 可在易支付商户后台查看沙箱交易日志,用于调试问题。

六、常见问题

  1. 支付时提示 “签名错误”:检查商户 ID、API 密钥、AppID 是否与后台一致,确保参数传递过程中无空格或特殊字符。

  2. 回调接口接收不到通知:核对 notifyUrl 是否为公网可访问地址,且未设置防火墙拦截;回调返回格式必须为纯文本 “success”。

  3. 退款失败:确认订单已支付,且退款金额不超过订单实付金额;检查商户账户余额充足。

  4. SDK 初始化失败:检查小程序基础库版本是否达标,核心文件是否完整导入项目。


返回顶部