小程序支付接入流程
注册微信支付商户号在微信支付官网注册商户号,完成资质审核和账户验证。确保商户号与小程序主体一致。
配置支付域名在小程序后台配置request合法域名,添加https://api.mch.weixin.qq.com。同时配置downloadFile合法域名用于退款证书下载。
获取API密钥登录微信支付商户平台,在【账户中心】-【API安全】中设置32位API密钥。该密钥用于签名生成和验证。
开发支付功能调用统一下单接口pay/unifiedorder生成预支付订单。需传递小程序appId、商户号mch_id、随机字符串nonce_str等参数。
wx.requestPayment({ timeStamp: '', nonceStr: '', package: '', signType: 'MD5', paySign: '', success(res) {}, fail(res) {} })支付签名生成方法
参数排序将所有待签名参数按ASCII码从小到大排序,排除空值和sign参数。
拼接字符串使用key=value格式拼接参数,最后加上&key=API密钥。例如:appid=wx123&mch_id=456&nonce_str=789&key=your_key
生成签名对拼接字符串进行MD5加密,结果转为大写即得到签名sign。PHP示例代码:
function makeSign($params, $key){ ksort($params); $string = http_build_query($params)."&key=$key"; return strtoupper(md5($string)); }常见问题处理
支付回调验证在支付通知接口中验证签名,比较微信回调的sign与本地计算的sign是否一致。验证通过后再处理业务逻辑。
证书使用场景退款和转账接口需要双向证书。证书文件包括apiclient_cert.pem和apiclient_key.pem,需从商户平台下载。
错误码处理遇到INVALID_REQUEST时检查参数格式;NOAUTH表示未授权该接口;NOTENOUGH为余额不足。完整错误码参考微信支付文档。
安全规范建议
敏感信息保护API密钥和证书文件禁止提交到代码仓库。建议采用配置中心或环境变量管理。
防重放机制使用nonce_str防止重复请求,服务器需校验nonce_str唯一性。时间戳timestamp建议误差不超过5分钟。
金额校验后端需二次确认支付金额,防止前端参数被篡改。支付结果以微信异步通知为准。