Native支付
<h2>支付宝Native支付接口</h2>
<p>> /api/pay/alipay</p>
<h3>主体请求参数</h3>
<table>
<thead>
<tr>
<th>参数名称</th>
<th>类型</th>
<th>必填</th>
<th>中文名</th>
</tr>
</thead>
<tbody>
<tr>
<td>sign</td>
<td>String</td>
<td>✅</td>
<td>签名</td>
</tr>
<tr>
<td>timestamp</td>
<td>String</td>
<td>✅</td>
<td>签名时间戳(毫秒)</td>
</tr>
<tr>
<td>merchantNo</td>
<td>String</td>
<td>✅</td>
<td>商户编号</td>
</tr>
<tr>
<td>merchantOrderNo</td>
<td>String</td>
<td>✅</td>
<td>商户订单号</td>
</tr>
<tr>
<td>payChannelId</td>
<td>int</td>
<td>✅</td>
<td>支付方式 固定传:12</td>
</tr>
<tr>
<td>channelCode</td>
<td>String</td>
<td>✅</td>
<td>渠道</td>
</tr>
<tr>
<td>amount</td>
<td>int</td>
<td>✅</td>
<td>支付金额(分)</td>
</tr>
<tr>
<td>alipayInfo</td>
<td>String</td>
<td>✅</td>
<td>支付宝信息(JSON字符串)</td>
</tr>
<tr>
<td>goodsDetail</td>
<td>String</td>
<td>❌</td>
<td>商品详情(JSON字符串)</td>
</tr>
<tr>
<td>notifyUrl</td>
<td>String</td>
<td>❌</td>
<td>回调地址</td>
</tr>
<tr>
<td>attach</td>
<td>String</td>
<td>❌</td>
<td>附加数据,支付成功原样返回</td>
</tr>
<tr>
<td>description</td>
<td>String</td>
<td>✅</td>
<td>订单商品描述</td>
</tr>
<tr>
<td>clientIp</td>
<td>String</td>
<td>❌</td>
<td>用户IP地址</td>
</tr>
<tr>
<td>terminalInfo</td>
<td>String</td>
<td>❌</td>
<td>交易终端信息(JSON字符串)</td>
</tr>
<tr>
<td>gpsInfo</td>
<td>String</td>
<td>❌</td>
<td>gps信息。<br/>校验GPS信息格式, 如:-128.12,23.1 <br/>1. xxx,xxx <br/>2. 经度xxx为[-180,180]之间的浮点数,维度xxx为[-90,90]之间的浮点数,最多保留小数点八位float(11,8)</td>
</tr>
<tr>
<td>bsInfo</td>
<td>String</td>
<td>❌</td>
<td>基站信息。<br/>校验基站信息格式,格式说明:<br/>-- 1. 格式为:xxx,xxx,xxx,xxx 如:460,1,12,23454<br/>-- 2. xxx均为整数,长度不超过11位 基站信息,从左至右依次对应以下几个字段: <br/>mcc: 移动国家号码,由3位数字组成,唯一地识别移动用户所属的国家。我国为460 <br/>mnc:移动网号,由两位数字组成,用于识别移动用户所归属的移动网 <br/>lac:位置区编码,为寻呼而设置的一个区域,覆盖一片地理区域,按寻呼量划分 <br/>ci :负责收发的天线所朝向的扇区编号</td>
</tr>
</tbody>
</table>
<h3>子节点请求参数</h3>
<h4>goodsDetail 商品详情JSON</h4>
<table>
<thead>
<tr>
<th>参数名称</th>
<th>类型</th>
<th>必选</th>
<th>中文名</th>
</tr>
</thead>
<tbody>
<tr>
<td>details</td>
<td>array</td>
<td>✅</td>
<td>商品信息</td>
</tr>
<tr>
<td>↳ goodsId</td>
<td>String</td>
<td>✅</td>
<td>商品ID</td>
</tr>
<tr>
<td>↳ alipayGoodsId</td>
<td>String</td>
<td>❌</td>
<td>支付宝定义的统一商品编号(没有可不传)</td>
</tr>
<tr>
<td>↳ goodsName</td>
<td>String</td>
<td>✅</td>
<td>商品参数名称</td>
</tr>
<tr>
<td>↳ quantity</td>
<td>int</td>
<td>✅</td>
<td>商品数量</td>
</tr>
<tr>
<td>↳ price</td>
<td>int</td>
<td>✅</td>
<td>商品价格(分) <br/>如果商户有优惠,需传输商户优惠后的单价<br/>(例如:用户对一笔 100 元的订单使用了商场发的优惠券 100-50,则活动商品的单价应为原单价-50)</td>
</tr>
<tr>
<td>↳ goodsCategory</td>
<td>String</td>
<td>❌</td>
<td>商品类目</td>
</tr>
<tr>
<td>↳ categoriesTree</td>
<td>String</td>
<td>❌</td>
<td>商品类目数,从商户品类目根节点到叶子节点的类目id组成,类目id使用 丨 分割</td>
</tr>
<tr>
<td>↳ body</td>
<td>String</td>
<td>❌</td>
<td>商品描述信息</td>
</tr>
<tr>
<td>↳ showUrl</td>
<td>String</td>
<td>❌</td>
<td>商品的展示地址</td>
</tr>
</tbody>
</table>
<h4>alipayInfo 支付宝信息</h4>
<table>
<thead>
<tr>
<th>参数名称</th>
<th>类型</th>
<th>必选</th>
<th>中文名</th>
</tr>
</thead>
<tbody>
<tr>
<td>sellerId</td>
<td>String</td>
<td>❌</td>
<td>如果该值为空,则默认为商户签约账号 <br/>对应的支付宝用户 ID <br/>预授权场景下无需上送</td>
</tr>
<tr>
<td>discountableAmount</td>
<td>String</td>
<td>❌</td>
<td>参与优惠计算的金额,单位为元,精确到小数点后两位 , 取值范围[0.01,100000000]。 如果该值未传入, 但传入了【订单总金额】和【不可打折 金额】,则该值默认为【订单总金额】 -【不可打折金额】</td>
</tr>
<tr>
<td>undiscountableAmount</td>
<td>String</td>
<td>❌</td>
<td>确 到 小 数 点 后 两 位 , 取 值 范 围 [0.01,100000000]。如果该值未传入, 但传入了【订单总金额】和【可打折金额】,则该值默认为【订单总金额】- 【可打折金额】</td>
</tr>
<tr>
<td>operatorId</td>
<td>String</td>
<td>❌</td>
<td>商户操作员编号</td>
</tr>
<tr>
<td>alipayStoreId</td>
<td>String</td>
<td>❌</td>
<td>支付宝的店铺编号</td>
</tr>
<tr>
<td>terminalParams</td>
<td>String</td>
<td>❌</td>
<td>json 格式;商户传入终端设备。 <br/>具体要求请按照支付宝的要求来,平台侧仅对该参数进行透传。</td>
</tr>
<tr>
<td>advancePaymentType</td>
<td>String</td>
<td>❌</td>
<td>支付模式类型 , 若值为ENJOY_PAY_V2表示当前交易允许走先享后付 2.0 垫资。<br/> 平台仅对该参数进行透传</td>
</tr>
<tr>
<td>queryOptions</td>
<td>String</td>
<td>❌</td>
<td>返回查询选项,商户通过上送该参数来定制同步需要额外返回的信息字段,数组格式。如:["fund_bill_list","voucher_detail_list","discount_goods_detail"]<br/>可返回项会随着支付宝的调整而进行增加。</td>
</tr>
<tr>
<td>disablePayChannels</td>
<td>String</td>
<td>❌</td>
<td>禁用支付渠道,多个渠道以逗号分割,如同时禁用信用支付类型和积分,则disable_pay_channels="credit_group,point"<br/>具体的支付渠道,请参考支付宝侧支付渠道代码。</td>
</tr>
<tr>
<td>businessParams</td>
<td>JSON</td>
<td>❌</td>
<td>商户传入业务信息,具体值要和支付宝约定,应用于安全,营销等参数直传场景,格式为JSON格式。<br/><br/>该参数及其内容平台侧仅透传,具体作用请咨询支付宝侧。</td>
</tr>
<tr>
<td>↳ enableThirdpartySubsidy</td>
<td>String</td>
<td>❌</td>
<td>是否使用商家贴息。枚举:Y、N <br/>使用该参数前,商户需要报名支付宝花呗分期商家贴息活动。 <br/>如果第三⽅贴息活动为全场贴息,默认可贴息,传⼊ N 值则本笔交易禁⽤三⽅贴息; <br/>如果第三⽅贴息活动为指定订单传参贴息,默认禁⽤贴息,传⼊Y 值则本笔交易启⽤三⽅贴息</td>
</tr>
<tr>
<td>↳ bizSource</td>
<td>String</td>
<td>❌</td>
<td>支付宝扫码点餐字段,平台侧仅透传</td>
</tr>
<tr>
<td>↳ sourcePath</td>
<td>String</td>
<td>❌</td>
<td>支付宝扫码点餐字段,平台侧仅透传</td>
</tr>
<tr>
<td>extendParams</td>
<td>JSON</td>
<td>❌</td>
<td>业务扩展参数 ,JSON格式</td>
</tr>
<tr>
<td>↳ fqNum</td>
<td>String</td>
<td>❌</td>
<td>信用卡分期数,仅支持传入 3、6、12,其他期数暂不支持,传入会报错。</td>
</tr>
<tr>
<td>↳ fqSellerPercent</td>
<td>String</td>
<td>❌</td>
<td>信用卡分期卖家承担收费比例,商家承担手续费传入 100,用户 承担手续费传入 0,仅支持传入 100、0 两种,其他比例暂不支持,传入会报错。</td>
</tr>
<tr>
<td>↳ fqChannels</td>
<td>String</td>
<td>❌</td>
<td>代表优先使⽤该资产进⾏⽀付;仅⽀持传⼊alipayfq_cc,表示信⽤卡分 期,其他资产暂不⽀持,传⼊会报错。</td>
</tr>
<tr>
<td>↳ sysServiceProviderId</td>
<td>String</td>
<td>❌</td>
<td>系统商编号。该参数作为系统商返佣数 <br/>据提取的依据,请填写系统商签约协议 的 PID</td>
</tr>
<tr>
<td>↳ hbFqNum</td>
<td>String</td>
<td>❌</td>
<td>使用花呗分期要进行的分期数</td>
</tr>
<tr>
<td>↳ hbFqSellerPercent</td>
<td>String</td>
<td>❌</td>
<td>使用花呗分期需要卖家承担的手续费 <br/>比例的百分值,传入 100 代表 100%。该参数当前支付宝侧暂时不生效</td>
</tr>
<tr>
<td>↳ industryRefluxInfo</td>
<td>String</td>
<td>❌</td>
<td>行业数据回流信息。<br/>JSON格式字符串</td>
</tr>
<tr>
<td>extUserInfo</td>
<td>JSON</td>
<td>❌</td>
<td>外部指定买家,JSON格式。<br/>该参数及其内容平台侧仅透传,具体作用请咨询支付宝侧。</td>
</tr>
<tr>
<td>↳ name</td>
<td>String</td>
<td>❌</td>
<td>姓名 <br/>注: need_check_info=T 时,该参数才有效</td>
</tr>
<tr>
<td>↳ mobile</td>
<td>String</td>
<td>❌</td>
<td>手机号 <br/>注:该参数暂不校验</td>
</tr>
<tr>
<td>↳ certType</td>
<td>String</td>
<td>❌</td>
<td>身份证:IDENTITY_CARD<br/>护照:PASSPORT<br/>军官证:OFFICER_CARD<br/>士兵证:SOLDIER_CARD<br/>户口本:HOKOU 等<br/>注:need_check_info=T 时 该参数才有效</td>
</tr>
<tr>
<td>↳ certNo</td>
<td>String</td>
<td>❌</td>
<td>证件号 <br/>注:need_check_info=T 时该参数才有效</td>
</tr>
<tr>
<td>↳ minAge</td>
<td>String</td>
<td>❌</td>
<td>允许的最小买家年龄,买家年龄必须大 于等于所传数值:<br/>1. need_check_info=T 时该参数才有效<br/>2. min_age 为整数,必须大于等于 0</td>
</tr>
<tr>
<td>↳ fixBuyer</td>
<td>String</td>
<td>❌</td>
<td>8 是否强制校验付款人身份信息,枚举如下:<br/>T:强制校验<br/> F:不强制</td>
</tr>
<tr>
<td>↳ needCheckInfo</td>
<td>String</td>
<td>❌</td>
<td>是否强制校验付款人身份信息,枚举如下:<br/>T:强制校验<br/>F:不强制</td>
</tr>
<tr>
<td>promoParams</td>
<td>JSON</td>
<td>❌</td>
<td>优惠明细参数,通过此属性补充营销参数 <br/>平台侧仅对该参数进行透传。</td>
</tr>
<tr>
<td>↳ actualOrderTime</td>
<td>String</td>
<td>❌</td>
<td>存在延迟扣款这一类的场景,用这个时间表明用户发生交易的时间,比如说,在公交地铁场景,用户刷码出站的时间,和商户上送交易的时间是不一样的。</td>
</tr>
</tbody>
</table>
<h4>terminalInfo 交易终端信息JSON</h4>
<table>
<thead>
<tr>
<th>参数名称</th>
<th>类型</th>
<th>必选</th>
<th>中文名</th>
</tr>
</thead>
<tbody>
<tr>
<td>longitude</td>
<td>String</td>
<td>❌</td>
<td>受理终端设备实时经度信息。<br/>经度为[-180,180]之前的浮点数,最多保留小数点8位<br/>-表示西经,+表示东经(不带正号时也表示东经)</td>
</tr>
<tr>
<td>latitude</td>
<td>String</td>
<td>❌</td>
<td>受理终端设备实时纬度信息。<br/>纬度为[-90,90]之前的浮点数,最多保留小数点8位<br/>-表示南纬,+表示北纬(不带正号时也表示北纬)</td>
</tr>
<tr>
<td>networkLicense</td>
<td>String</td>
<td>❌</td>
<td>终端入网认证编号。<br/>银行卡受理终端产品应用认证编 号。该编号由“中国银联标识产品企业资质认证办公室”为通过入网认证的终端进行分配。银联直连终端必填。<br/> 格式:5 位字符,例如 P3100</td>
</tr>
<tr>
<td>deviceType</td>
<td>String</td>
<td>✅</td>
<td>终端设备类型,受理方可参考终端。注册时的设备类型填写,取值如下:<br/>01:自动柜员机(含 ATM 和 CDM)和多媒体自助终端<br/>02:传统 POS<br/>03:mPOS<br/>04:智能 POS<br/>05:II 型固定电话<br/>06:云闪付终端;<br/>07:保留使用;<br/>08:手机 POS;<br/>09:刷脸付终端;<br/>10:条码支付受理终端;<br/>11:条码支付辅助受理终端;<br/>12:行业终端(公交、地铁用于指定行业的终端)<br/>13:MIS 终端;</td>
</tr>
<tr>
<td>deviceId</td>
<td>String</td>
<td>✅</td>
<td>终端设备号,收单机构为商户终端分配的唯一编号</td>
</tr>
<tr>
<td>serialNum</td>
<td>String</td>
<td>⭕️</td>
<td>50 终端设备的硬件序列号,出现要求: 终端类型<br/>(device_type)填写为 02、03、04、05、06、08、09 或 10 时,必须填写终端序列号。</td>
</tr>
<tr>
<td>encryptRandNum</td>
<td>String</td>
<td>❌</td>
<td>加密随机因子。<br/>仅在被扫支付类交易报文中出现:若付款码为 19 位数字,则取后6 位;若付款码为 EMV 二维码,则取其 tag 57 的卡号/token 号的后 6 位</td>
</tr>
<tr>
<td>secretText</td>
<td>String</td>
<td>❌</td>
<td>16 密文数据。<br/>仅在被扫支付类交易报文中出现: 64bit 的密文数据,对终端硬件序列号和加密随机因子加密后的结果。 本子域取值为:64bit 密文数据进行base64 编码后的结果。</td>
</tr>
<tr>
<td>appVersion</td>
<td>String</td>
<td>❌</td>
<td>应用程序版本号。终端应用程序的版本号。应用程序变更应保证版本号不重复。当长度不足时,右补空格。</td>
</tr>
<tr>
<td>deviceIp</td>
<td>String</td>
<td>⭕️</td>
<td>商户端终端设备 IP 地址。<br/>注:如经、 维度信息未上送,该字段必送。</td>
</tr>
</tbody>
</table>
<p>> alipayInfo参数JSON实例(由于alipayInfo参数比较复杂,一下是展示JSON结构)</p>
<pre><code class="language-json">{
&quot;alipayInfo&quot;: {
&quot;sellerId&quot;: &quot;&quot;,
&quot;discountableAmount&quot;: &quot;&quot;,
&quot;undiscountableAmount&quot;: &quot;&quot;,
&quot;operatorId&quot;: &quot;&quot;,
&quot;alipayStoreId&quot;: &quot;&quot;,
&quot;terminalParams&quot;: &quot;&quot;,
&quot;advancePaymentType&quot;: &quot;&quot;,
&quot;queryOptions&quot;: &quot;&quot;,
&quot;disablePayChannels&quot;: &quot;&quot;,
&quot;actualOrderTime&quot;: &quot;&quot;,
&quot;businessParams&quot;: {
&quot;enableThirdpartySubsidy&quot;: &quot;N&quot;,
&quot;bizSource&quot;: &quot;&quot;,
&quot;sourcePath&quot;: &quot;&quot;
},
&quot;extendParams&quot;: {
&quot;fqNum&quot;: &quot;&quot;,
&quot;fqSellerPercent&quot;: &quot;&quot;,
&quot;fqChannels&quot;: &quot;&quot;,
&quot;sysServiceProviderId&quot;: &quot;&quot;,
&quot;hbFqNum&quot;: &quot;&quot;,
&quot;hbFqSellerPercent&quot;: &quot;&quot;,
&quot;industryRefluxInfo&quot;: &quot;&quot;,
&quot;cardType&quot;: &quot;&quot;
},
&quot;extUserInfo&quot;: {
&quot;name&quot;: &quot;&quot;,
&quot;mobile&quot;: &quot;&quot;,
&quot;certType&quot;: &quot;&quot;,
&quot;certNo&quot;: &quot;&quot;,
&quot;minAge&quot;: &quot;&quot;,
&quot;fixBuyer&quot;: &quot;&quot;,
&quot;needCheckInfo&quot;: &quot;&quot;
},
&quot;promoParams&quot;: {
&quot;actualOrderTime&quot;: &quot;&quot;
}
}
}</code></pre>
<p>> 请求参数示例(参数需要加密,以下是加密前的示例)</p>
<pre><code class="language-json">{
&quot;sign&quot;: &quot;291C70CA1DC3823C79ABA4DAD95C5D98&quot;,
&quot;timestamp&quot;: &quot;1735660800000&quot;,
&quot;merchantNo&quot;: 17170000000000000000,
&quot;merchantOrderNo&quot;: &quot;NO1234567890&quot;,
&quot;payChannelId&quot;: 12,
&quot;channelCode&quot;: &quot;LeShua&quot;,
&quot;amount&quot;: 1,
&quot;goodsDetail&quot;: &quot;{\&quot;details\&quot;:[{\&quot;goodsId\&quot;:\&quot;1\&quot;,\&quot;alipayGoodsId\&quot;:\&quot;2\&quot;,\&quot;goodsName\&quot;:\&quot;测试商品\&quot;,\&quot;quantity\&quot;:1,\&quot;price\&quot;:1}]}&quot;,
&quot;alipayInfo&quot;: &quot;{}&quot;,
&quot;notifyUrl&quot;: &quot;https://abc/abc&quot;,
&quot;clientIp&quot;: &quot;127.0.0.1&quot;,
&quot;attach&quot;: &quot;附加信息&quot;,
&quot;description&quot;: &quot;商品A&quot;,
&quot;gpsInfo&quot;: &quot;128.12,23.1&quot;,
&quot;bsInfo&quot;: &quot;460&quot;,
&quot;terminalInfo&quot;: &quot;{\&quot;longitude\&quot;:\&quot;177.22\&quot;,\&quot;latitude\&quot;:\&quot;-22.99\&quot;,\&quot;networkLicense\&quot;:\&quot;P3100\&quot;,\&quot;deviceType\&quot;:\&quot;02\&quot;,\&quot;deviceId\&quot;:\&quot;POS01\&quot;,\&quot;serialNum\&quot;:\&quot;123321\&quot;,\&quot;encryptRandNum\&quot;:\&quot;111111\&quot;,\&quot;secretText\&quot;:\&quot;2222222\&quot;,\&quot;appVersion\&quot;:\&quot;333\&quot;,\&quot;deviceIp\&quot;:\&quot;127.0.0.1\&quot;}&quot;
}</code></pre>
<h3>返回数据结构</h3>
<table>
<thead>
<tr>
<th>参数名称</th>
<th>类型</th>
<th>必填</th>
<th>是否加密</th>
<th>中文名</th>
</tr>
</thead>
<tbody>
<tr>
<td>success</td>
<td>boolean</td>
<td>是</td>
<td>❌</td>
<td>响应状态</td>
</tr>
<tr>
<td>code</td>
<td>integer</td>
<td>是</td>
<td>❌</td>
<td>响应编码</td>
</tr>
<tr>
<td>msg</td>
<td>string</td>
<td>是</td>
<td>❌</td>
<td>响应信息</td>
</tr>
<tr>
<td>data</td>
<td>object</td>
<td>是</td>
<td>❌</td>
<td>响应数据</td>
</tr>
<tr>
<td>↳ sign</td>
<td>string</td>
<td>是</td>
<td>❌</td>
<td>签名</td>
</tr>
<tr>
<td>↳ timestamp</td>
<td>string</td>
<td>是</td>
<td>❌</td>
<td>签名时间戳(毫秒)</td>
</tr>
<tr>
<td>↳ merchantNo</td>
<td>string</td>
<td>是</td>
<td>❌</td>
<td>商户编号</td>
</tr>
<tr>
<td>↳ orderNo</td>
<td>string</td>
<td>是</td>
<td>✅</td>
<td>聚合平台订单号</td>
</tr>
<tr>
<td>↳ merchantOrderNo</td>
<td>string</td>
<td>是</td>
<td>✅</td>
<td>商户订单号</td>
</tr>
<tr>
<td>↳ tdCode</td>
<td>string</td>
<td>是</td>
<td>✅</td>
<td>支付二维码链接 <br/>二维码链接由支付宝生成,可直接通过该链接生成二维码扫码支付</td>
</tr>
<tr>
<td>↳ placeTime</td>
<td>string</td>
<td>是</td>
<td>✅</td>
<td>下单时间</td>
</tr>
<tr>
<td>↳ payState</td>
<td>string</td>
<td>是</td>
<td>✅</td>
<td>订单支付状态 <br/>0:未支付;<br/>1:已支付;<br/>2:支付失败;<br/>3:支付关闭;<br/>4:支付超时;<br/>5:退款中;<br/>6:已退款</td>
</tr>
<tr>
<td>↳ attach</td>
<td>string</td>
<td>是</td>
<td>✅</td>
<td>附加数据</td>
</tr>
<tr>
<td>↳ clientIp</td>
<td>string</td>
<td>是</td>
<td>✅</td>
<td>用户IP</td>
</tr>
</tbody>
</table>
<p>> 返回示例(data参数需要解密,以下是实际响应数据示例)</p>
<p>状态码 <strong>200</strong></p>
<pre><code class="language-json">{
&quot;success&quot;: true,
&quot;code&quot;: 200,
&quot;msg&quot;: &quot;操作成功&quot;,
&quot;data&quot;: {
&quot;sign&quot;: &quot;291C70CA1DC3823C79ABA4DAD95C5D98&quot;,
&quot;timestamp&quot;: 1743582863829,
&quot;merchantNo&quot;: &quot;17170000000000000000&quot;,
&quot;orderNo&quot;: &quot;t3q96ediYXvvWbi1eqHJ5YBthAoEyWqIzkOqAWiai/E=&quot;,
&quot;merchantOrderNo&quot;: &quot;WLXzddn2ATFBPSf9kI4edk9VltyAJ8/TTiSb7V1TT80=&quot;,
&quot;payInfo&quot;: &quot;hQtMf0FCe37**************************&quot;,
&quot;alipayInfos&quot;: &quot;hQtMf0FCe37**************************&quot;,
&quot;placeTime&quot;: &quot;XDzklufxmMBnd7G/uISZ3w==&quot;,
&quot;payState&quot;: &quot;hQtMf0FCe37ZPOHU4HL4xA==&quot;,
&quot;attach&quot;: &quot;Br/deow2oXKRDZ2B7fIE3w==&quot;,
&quot;clientIp&quot;: &quot;zi2j3OnP+gv5bTIh1k6QXA==&quot;
}
}</code></pre>