从商户配置到第一笔扫码支付

按照准备、配置通道、签名下单、验证回调、上线检查的顺序完成接入,可以更快定位联调问题。

接入前准备

开始联调前,建议先确认下面几项基础条件,避免把服务器环境问题误判成支付接口问题。

网站环境PHP、MySQL 和必要扩展安装正常,站点可通过 HTTPS 访问。
回调地址notify_url 可被公网访问,return_url 是用户支付完成后的跳转页面。
支付条件官方支付准备对应商户参数;个人免签准备本人收款码与 Android 设备。
测试策略建议先用 Sandbox 跑通支付闭环,再切换支付宝、微信或个人免签。

1. 获取商户 PID 与 API KEY

注册并登录商户控制台,在“安全设置”中查看 PID 和 API KEY。PID 用于标识商户;API KEY 用于服务端签名,必须妥善保管。

建议:不要把 API KEY 写进 HTML、JavaScript、小程序前端或公开代码仓库。签名应由你的业务服务器生成。

2. 配置码支付通道

进入“支付通道”添加收款账户。一个商户可以同时配置多条通道,系统会根据支付类型、状态、权重和限额选择可用通道。

支

支付宝官方码支付

选择支付宝官方当面付,填写 AppID、应用私钥、支付宝公钥等参数,并确保 Composer 已安装支付宝官方依赖。

  • 适合正式支付宝商户
  • 创建动态支付二维码
  • 由支付宝异步通知确认结果
微

微信官方码支付

选择微信支付 Native,填写商户号、AppID、APIv3 Key、商户私钥、证书序列号和平台公钥信息。

  • 适合正式微信支付商户
  • 用户使用微信扫一扫
  • APIv3 回调验签与解密
个

个人免签码支付

先创建监听设备,再添加个人免签通道,绑定设备并上传本人支付宝或微信静态收款码。

  • 适合测试和低频自有收款
  • 建议开启浮动金额
  • 保持监听 App 后台运行

3. 发起码支付订单

旧项目可以使用兼容页面跳转接口 /submit.php。业务服务器准备参数后计算 MD5 签名,再以 POST 方式提交。

POST /submit.php

pid=1000
type=alipay
out_trade_no=ORDER202608310001
notify_url=https://merchant.example/notify
return_url=https://merchant.example/return
name=会员充值
money=9.90
attach=user_10086
sign=签名结果
sign_type=MD5

签名生成思路

  1. 移除 sign、sign_type 和空值字段。
  2. 按参数名升序排列并拼接成 key=value&...。
  3. 在拼接字符串末尾直接追加商户 API KEY。
  4. 对最终字符串计算 MD5,得到小写签名。
调试建议:签名错误时,先把“参与签名的最终字符串”完整打印到服务器日志,对照接口文档逐项检查空值、编码和字段排序。

4. 正确处理支付异步回调

系统确认订单支付成功后,会向商户 notify_url POST 支付结果。你的业务程序需要完成以下处理:

01根据回调参数重新计算签名,确认通知来自当前码支付系统。
02根据 out_trade_no 查询本地业务订单,并确认订单金额与业务状态符合预期。
03使用幂等方式完成充值、发货或权益开通,避免重复通知造成重复发放。
04全部处理完成后返回纯文本 success,否则系统会按策略继续重试。
// 伪代码示例
if (verifySign($_POST) && orderIsValid($_POST['out_trade_no'])) {
    deliverOnce($_POST['out_trade_no']);
    echo 'success';
}

5. 配置个人免签监听

个人免签模式由你自己的 Android 设备主动上报本人支付宝/微信到账通知。推荐按下面顺序配置:

1后台“免签监听”创建一台设备,保存设备编号与设备密钥。
2Android 客户端填写本站地址、设备编号和密钥,授予通知读取权限。
3确认后台可以看到客户端心跳与最近在线时间。
4添加个人免签支付通道,绑定该设备并上传本人静态收款码。
5建议设置小范围浮动金额,并用 0.01 元附近订单进行真实到账测试。
监听模式的通知格式可能随支付宝、微信或 Android 系统版本变化。正式部署前请在自己的设备上真实测试,并保持客户端网络和后台运行权限正常。

6. 上线前检查清单

常见联调问题

提示“签名验证错误”怎么办?

检查参与签名的字段是否与实际提交字段完全一致,去除 sign、sign_type 和空值后再排序;确认最后追加的是当前商户 API KEY。

提示“没有可用收款通道”怎么办?

检查支付类型是否启用、通道是否启用且在线、金额是否落在单笔限额范围内,以及日限额是否已经用完。

订单支付成功但业务没有发货怎么办?

查看后台回调日志,确认 notify_url 是否收到请求、返回状态码是否正常、业务程序是否验签成功并返回纯文本 success。

个人免签订单一直等待支付怎么办?

检查监听客户端是否在线、通知读取权限是否开启、支付应用通知是否被系统关闭、订单实际金额是否与到账通知金额一致。