统一下单接口
<h1>统一下单接口开发文档</h1>
<h2>一、接口概述</h2>
<p>统一下单接口用于服务器后端发起支付请求,可返回支付二维码链接、支付跳转 URL 等信息,支持多种支付方式和接口类型,满足不同场景下的支付需求。</p>
<h2>二、接口详情</h2>
<ol>
<li><strong>请求地址</strong>:<code>https://pay.lmwa.cn/api/pay/create</code></li>
<li><strong>请求方式</strong>:POST</li>
</ol>
<h2>三、请求参数说明</h2>
<table>
<thead>
<tr>
<th>字段名</th>
<th>变量名</th>
<th>必填</th>
<th>类型</th>
<th>示例值</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>商户 ID</td>
<td>pid</td>
<td>是</td>
<td>Int</td>
<td>1001</td>
<td>商户在支付平台的唯一标识</td>
</tr>
<tr>
<td>接口类型</td>
<td>method</td>
<td>是</td>
<td>String</td>
<td>web</td>
<td>指定支付接口类型,取值参考接口类型列表</td>
</tr>
<tr>
<td>设备类型</td>
<td>device</td>
<td>否</td>
<td>String</td>
<td>pc</td>
<td>仅通用网页支付时需传,取值参考设备类型列表,默认值为 pc</td>
</tr>
<tr>
<td>支付方式</td>
<td>type</td>
<td>是</td>
<td>String</td>
<td>alipay</td>
<td>指定支付使用的第三方平台,取值参考支付方式列表</td>
</tr>
<tr>
<td>商户订单号</td>
<td>out_trade_no</td>
<td>是</td>
<td>String</td>
<td>20160806151343349</td>
<td>商户系统内部的订单号,用于唯一标识一笔订单</td>
</tr>
<tr>
<td>异步通知地址</td>
<td>notify_url</td>
<td>是</td>
<td>String</td>
<td><a href="http://www.pay.com/notify_url.php">http://www.pay.com/notify_url.php</a></td>
<td>支付平台在支付完成后,主动向该地址发送异步通知,告知支付结果</td>
</tr>
<tr>
<td>跳转通知地址</td>
<td>return_url</td>
<td>是</td>
<td>String</td>
<td><a href="http://www.pay.com/return_url.php">http://www.pay.com/return_url.php</a></td>
<td>支付完成后,用户浏览器会跳转至此地址,并附带支付相关参数</td>
</tr>
<tr>
<td>商品名称</td>
<td>name</td>
<td>是</td>
<td>String</td>
<td>VIP 会员</td>
<td>商品或服务的名称,长度超过 127 个字节会自动截取</td>
</tr>
<tr>
<td>商品金额</td>
<td>money</td>
<td>是</td>
<td>String</td>
<td>1.00</td>
<td>商品或服务的价格,单位为元,最多保留 2 位小数</td>
</tr>
<tr>
<td>用户 IP 地址</td>
<td>clientip</td>
<td>是</td>
<td>String</td>
<td>192.168.1.100</td>
<td>用户发起支付请求时的 IP 地址</td>
</tr>
<tr>
<td>业务扩展参数</td>
<td>param</td>
<td>否</td>
<td>String</td>
<td>没有请留空</td>
<td>支付完成后,该参数会原样返回,可用于传递自定义信息</td>
</tr>
<tr>
<td>被扫支付授权码</td>
<td>auth_code</td>
<td>否</td>
<td>String</td>
<td>-</td>
<td>仅被扫支付场景需要传递,付款码支付时使用</td>
</tr>
<tr>
<td>用户 Openid</td>
<td>sub_openid</td>
<td>否</td>
<td>String</td>
<td>-</td>
<td>仅 JSAPI 支付场景需要传递,用于标识用户在公众号或小程序内的唯一身份</td>
</tr>
<tr>
<td>公众号 AppId</td>
<td>sub_appid</td>
<td>否</td>
<td>String</td>
<td>-</td>
<td>仅 JSAPI 支付场景需要传递,公众号或小程序的 AppId</td>
</tr>
<tr>
<td>当前时间戳</td>
<td>timestamp</td>
<td>是</td>
<td>String</td>
<td>1721206072</td>
<td>10 位整数,单位为秒,用于防止重复请求和签名计算</td>
</tr>
<tr>
<td>签名字符串</td>
<td>sign</td>
<td>是</td>
<td>String</td>
<td>-</td>
<td>用于验证请求的合法性,参考签名规则生成</td>
</tr>
<tr>
<td>签名类型</td>
<td>sign_type</td>
<td>是</td>
<td>String</td>
<td>RSA</td>
<td>签名算法类型,默认为 RSA</td>
</tr>
</tbody>
</table>
<h2>四、返回参数说明</h2>
<table>
<thead>
<tr>
<th>字段名</th>
<th>变量名</th>
<th>类型</th>
<th>示例值</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>返回状态码</td>
<td>code</td>
<td>Int</td>
<td>0</td>
<td>0 表示支付请求成功,其他值表示失败,可根据错误信息排查问题</td>
</tr>
<tr>
<td>错误信息</td>
<td>msg</td>
<td>String</td>
<td>-</td>
<td>支付请求失败时,返回的具体错误原因</td>
</tr>
<tr>
<td>平台订单号</td>
<td>trade_no</td>
<td>String</td>
<td>20160806151343349</td>
<td>支付平台为该笔订单生成的唯一标识,用于后续查询和对账</td>
</tr>
<tr>
<td>发起支付类型</td>
<td>pay_type</td>
<td>String</td>
<td>jump</td>
<td>支付发起的具体方式,取值参考发起支付类型说明</td>
</tr>
<tr>
<td>发起支付参数</td>
<td>pay_info</td>
<td>String</td>
<td>weixin://wxpay/bizpayurl?pr=04IPMKM</td>
<td>根据不同的发起支付类型,返回不同的支付相关参数,如支付跳转链接、JSAPI 支付参数等</td>
</tr>
<tr>
<td>当前时间戳</td>
<td>timestamp</td>
<td>String</td>
<td>1721206072</td>
<td>10 位整数,单位为秒,与请求中的时间戳对应,可用于验证消息时效性</td>
</tr>
<tr>
<td>签名字符串</td>
<td>sign</td>
<td>String</td>
<td>-</td>
<td>用于验证返回数据的合法性,参考签名规则生成</td>
</tr>
<tr>
<td>签名类型</td>
<td>sign_type</td>
<td>String</td>
<td>RSA</td>
<td>签名算法类型,默认为 RSA</td>
</tr>
</tbody>
</table>
<h2>五、接口类型列表</h2>
<table>
<thead>
<tr>
<th>调用值</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>web</td>
<td>通用网页支付,根据 device 参数自动返回跳转 URL、二维码、小程序跳转 URL 等,适用于在网页端进行支付的场景</td>
</tr>
<tr>
<td>jump</td>
<td>跳转支付,仅返回支付跳转 URL,适合需要直接引导用户跳转到第三方支付页面的场景</td>
</tr>
<tr>
<td>jsapi</td>
<td>JSAPI 支付,用于小程序内支付,仅返回 JSAPI 支付所需参数,需传入 sub_openid 和 sub_appid 参数</td>
</tr>
<tr>
<td>app</td>
<td>APP 支付,用于 iOS / 安卓 APP 内支付,返回 APP 支付参数或 APP 拉起微信小程序参数</td>
</tr>
<tr>
<td>scan</td>
<td>付款码支付,需传入 auth_code 参数,支付成功后返回订单信息,常用于线下扫码支付场景</td>
</tr>
<tr>
<td>applet</td>
<td>小程序支付,用于微信小程序内支付,返回微信小程序插件参数或跳转小程序参数</td>
</tr>
</tbody>
</table>
<h2>六、设备类型列表</h2>
<table>
<thead>
<tr>
<th>调用值</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>pc</td>
<td>电脑浏览器,为通用网页支付的默认设备类型</td>
</tr>
<tr>
<td>mobile</td>
<td>手机浏览器</td>
</tr>
<tr>
<td>qq</td>
<td>手机 QQ 内浏览器</td>
</tr>
<tr>
<td>wechat</td>
<td>微信内浏览器</td>
</tr>
<tr>
<td>alipay</td>
<td>支付宝客户端</td>
</tr>
</tbody>
</table>
<h2>七、发起支付类型说明</h2>
<table>
<thead>
<tr>
<th>发起支付类型</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>jump</td>
<td>返回支付跳转 URL,直接引导用户跳转到第三方支付平台进行支付</td>
</tr>
<tr>
<td>html</td>
<td>返回 html 代码,用于支付跳转,可根据需求嵌入页面实现支付功能</td>
</tr>
<tr>
<td>qrcode</td>
<td>返回支付二维码,用户通过扫码完成支付,常用于线下或网页端扫码支付场景</td>
</tr>
<tr>
<td>urlscheme</td>
<td>返回微信 / 支付宝小程序跳转 URL scheme,用于在 APP 内拉起小程序进行支付</td>
</tr>
<tr>
<td>jsapi</td>
<td>返回用于发起 JSAPI 支付的参数,适用于小程序内支付</td>
</tr>
<tr>
<td>app</td>
<td>返回用于发起 APP 支付的参数,用于在 APP 内集成支付功能</td>
</tr>
<tr>
<td>scan</td>
<td>付款码支付成功后,返回支付订单信息</td>
</tr>
<tr>
<td>wxplugin</td>
<td>返回要拉起的微信小程序插件参数,用于未开通支付能力的小程序发起支付</td>
</tr>
<tr>
<td>wxapp</td>
<td>返回要拉起的微信小程序和路径,用于 APP 内拉起微信小程序支付</td>
</tr>
</tbody>
</table>
<h2>八、其他说明</h2>
<ol>
<li>代码实现时,需根据接口返回的 pay_type 值展示相应的支付页面。若不熟悉支付页面展示逻辑,可在请求时将 method 设置为 jump,此时 pay_type 只会返回 jump,系统会直接跳转支付。</li>
<li>付款码支付场景下,可不传支付类型 type 字段,系统会根据 auth_code 自动判断支付类型。</li>
<li>微信小程序插件支付,不同支付平台的拉起方式有所差异,可联系客服获取对接小程序插件的详细文档。</li>
<li>APP 拉起微信小程序支付可参考微信官方文档进行开发。</li>
</ol>