← 返回支付与收银台

DWZ / PAYMENT GUIDE · v0.9.1

从选择支付方式,
到真正收到第一笔款。

官网、Android、iOS 共用服务器、订单、退款和会员数据。支付产品须分别申请权限;同一台服务器不会自动让各端获得收款资格。

Android / iOS / Web 分端验收与当前步骤 →

当前完成情况

方式程序进度下一步
微信电脑扫码、手机网页、App SDK 调起代码、验签通知、查询与退款已接入核对商户权限、AppID 绑定、配置私钥并真机验收
支付宝电脑/手机收银台、Android/iOS SDK 调起、签名、通知、查询、关单和原路退款代码已加入开通商户产品、应用审核、密钥配置与沙箱/实单验收
银行卡快捷支付后台展示待开通状态;尚未实现实际绑卡、验证码扣款与解绑接口先确认收单机构、产品权限与正式接口,随后开发托管绑卡和凭证支付
Apple Pay/手机钱包后台展示待开通状态;尚未接入钱包 SDK、商户会话验证和处理支付令牌收单机构确认中国大陆场景与支持设备,再接入并验收

目前用户确认只拥有微信支付商户号。此版本没有连接真实支付账号、没有真实扣款,也没有生成签名 APK / IPA。网页中“本地演示”只用于熟悉流程。

第 1 步:先开通微信各端支付

  1. 商户管理员登录微信支付商户平台,核对公司主体和结算银行卡。
  2. 在产品中心分别确认 Native、H5 和 App 支付已申请开通。已有小程序微信支付并不等于 App 支付也已开通。
  3. 官网 H5 支付配置正式域名;App 在微信开放平台申请移动应用,填写真实 Android 包名、应用签名、iOS Bundle ID 和 Universal Link,并与商户号绑定。
  4. 服务器配置商户私钥、微信验签公钥、APIv3 密钥及对应 AppID;密钥不得放进 App 或发在聊天里。
  5. 完成支付、取消、回跳、断网补查、退款验收后,启用该端收款。

手机外部浏览器使用 H5;微信内打开的网页目前提示用系统浏览器付款。网页公众号 JSAPI OAuth 尚未加入。小程序继续使用原有 JSAPI 流程。

WECHAT_WEB_APP_ID=官网支付对应AppID
WECHAT_WEB_PAY_ENABLED=false
WECHAT_NATIVE_APP_ID=移动应用AppID
WECHAT_APP_PAY_ENABLED=false
WECHAT_ANDROID_PAY_VERIFIED=false
WECHAT_IOS_PAY_VERIFIED=false

生产环境的最后两个开关仅在真机验收后开启;受控测试环境由开发人员临时启用以进行指定测试,验收失败即关闭。Android 的 WXEntryActivity 与 WXPayEntryActivity 必须位于真实包名的 wxapi 下;改包名时同时调整。iOS 的公开配置可用 mobile/scripts/configure-wechat.py 填写。

官方依据:Native 下单、App 支付开发指引。

第 2 步:开通支付宝

  1. 公司管理员登录支付宝商家/开放平台,核对企业认证、收款主体与结算账户。
  2. 创建网页/移动应用,申请电脑网站支付、手机网站支付和 App 支付产品。实际资格与费率以支付宝审核和签约为准。
  3. 提交官网域名、App 包名、签名、Bundle ID 等资料,等待应用审核。
  4. 为服务端生成 RSA2 密钥,将应用公钥提交支付宝,保存应用私钥和支付宝验签公钥。此版采用普通公钥模式,若商户要求证书模式需再适配,不能把证书文件误当成公钥。
  5. 填写 ALIPAY_APP_ID、收款支付宝 PID(ALIPAY_SELLER_ID)及服务器上的密钥路径。金额始终由服务端订单读取。
  6. 先在独立沙箱环境验收,再在独立正式环境进行商家指定金额的小额实单和退款测试。
ALIPAY_MODE=disabled
ALIPAY_APP_ID=
ALIPAY_SELLER_ID=
ALIPAY_PRIVATE_KEY_PATH=./secrets/alipay/private.pem
ALIPAY_PUBLIC_KEY_PATH=./secrets/alipay/alipay_public.pem
ALIPAY_WEB_PAY_ENABLED=false
ALIPAY_APP_PAY_ENABLED=false
ALIPAY_ANDROID_PAY_VERIFIED=false
ALIPAY_IOS_PAY_VERIFIED=false

沙箱使用 ALIPAY_MODE=sandbox,正式使用 live;生产拒绝 sandbox。测试支付宝时设置 WECHAT_MODE=live,避免本地模拟模式接管收银台。禁止在已有待支付订单期间更换商户号、应用或环境;应先核清这些订单。

# 只配置公开标识,不填写私钥
python3 mobile/scripts/configure-alipay.py \
  --appid 你的支付宝应用ID --scheme 你们独有的回调Scheme
cd mobile
npm ci
DWZ_API_ORIGIN=https://正式商城域名 npm run sync

服务器支付通知地址为 https://正式商城域名/api/hooks/alipay/pay,接受支付宝签名表单;页面返回订单列表不代表已经收款,服务器验签通知或查单后才入账。SDK 回跳只触发查单。

官方依据:网页/移动应用接入、支付宝官方 Node.js SDK、App 支付 API。当前服务端固定 alipay-sdk 4.14.0,Android 固定 15.8.42,iOS 官方标准 SDK 15.8.42.1 的来源与哈希保存在插件 SDK-PROVENANCE.txt。

第 3 步:银行卡与手机钱包的开通资料

向公司的收单银行或有资质的支付机构询问下列需求,不要仅申请“网银收款”就认为全部包含。可以从银联官方入网渠道咨询,由其确认可受理的合作机构、企业资质、费率、结算周期及风控要求。开发前先取得该机构的正式接口文档和测试商户。

  1. 使用范围:中国大陆,人民币,实物商品,电脑官网、手机网页、Android 和 iOS。
  2. 银行卡:机构托管绑卡页/SDK、短信签约、签约查询、支付凭证 Token、短信付款、解绑、银行卡失效、退款、查询及日账单。
  3. 手机钱包:云闪付、支持的安卓手机 Pay、Apple Pay;分别明确支持网页还是 App、支持哪些银行卡和设备。
  4. 安全与状态:服务器验签、通知重试、金额校验、幂等订单、超时关单、退款与对账规则。

计划使用机构的绑卡页面处理完整卡号与身份核验,商城只保存加密的签约凭证、银行名称、卡号尾号和状态;不保存完整卡号、CVV、银行卡密码或短信验证码。每次付款由顾客明确发起并完成要求的验证,不做后台静默扣款或免密代扣。

拿到通道后继续实现:会员“我的银行卡”→机构页面添加银行卡→签约结果核验→选择已绑卡→短信确认付款→服务器核实结果;解绑也以机构确认成功为准。本版本没有收集银行卡资料的表单。

官方依据:银联无跳转支付及 Token 接口、银联线上收银台、商户入网文档。

第 4 步:Apple Pay 的额外配置

Apple Pay 将支付令牌交给收单机构处理,不等于直接绑定微信或支付宝商户号。先确认机构支持中国大陆当前场景。原生 App 需要 Apple Merchant ID、支付处理证书及签名中的 Apple Pay capability;官网还需要商户身份验证、域名验证和对应证书。使用机构托管方案时,部分步骤可能由机构完成,以接入产品为准。

入口须按实际浏览器、设备、钱包可用性与机构能力显示,不向所有设备展示一个无法付款的 Apple Pay 按钮。官网和 App 的支持范围分别验收。

官方依据:Apple Pay 实施说明、官网 Merchant ID/证书/域名配置。

第 5 步:后台按端生效与验收

  1. 打开后台“支付与收银台”,检查每个端的配置状态。
  2. 选择参考端,勾选支付方式,点击“保存并选择生效端”,勾选官网/Android/iOS 后确认。
  3. 尚未配置的真实通道不能开启。关闭入口不影响已有订单查单与退款。
  4. 每端依次测试成功付款、主动取消、支付后立即断网、App 被杀掉后返回、重复通知、超时订单和全额退款。
  5. 对照支付平台账单、商城订单、吉客云订单、会员积分,确认金额与状态一致后正式开放。ERP 对应支付方式也需核对:微信为 3,支付宝为 1,读回不一致时停止推送重试并人工核查。

一笔订单发起支付后绑定所选通道与场景。需要更换支付方式时先核实并取消原单,再创建新单,防止双重付款。支付宝已签发收银台但尚未建单时,不能直接释放库存;到付款期限结束并经过查询缓冲后再取消。

我可以完成代码、服务器配置、证书文件部署、域名验证文件和联调排查。企业实名、法人核验、银行卡验证、协议签署、费用确认及后台扫码授权由你操作;实际付款测试前会明确订单及金额。

部署与备份补充

服务端新增支付宝官方 SDK,源码部署先运行 npm ci --omit=dev --ignore-scripts,Dockerfile 已包含锁文件安装。数据库向前迁移至 8,新增支付通道、商户和环境记录,升级前先备份。支付密钥单独安全备份,不包含在源码交付包。App 更新需要重新编译并发布安装包。

本机未安装完整 Xcode 与 Android SDK,当前只完成前端构建和原生工程同步,不等于原生编译或真机验收。更新隐私政策中的微信与支付宝 SDK 用途、收集范围和第三方信息;银行/钱包 SDK 待实际选型后再填写,不虚构服务商。