JSAPI支付
<h1>微信公众号支付/支付宝生活号支付</h1>
<p><strong>适用范围</strong></p>
<p>用户在微信/支付宝中打开商户的 H5 页面,商户在 H5 页面通过调用微信/支付宝支付模块完成支付。应用场景有:</p>
<ul>
<li>用户在微信公众或小程序/支付宝口碑或生活号内进入商户商品页面,选购完成支付。</li>
<li>用户的好友在微信朋友圈、聊天窗口等分享商户页面连接,或用户在支付宝朋友之间分享商户页面连接,用户点击链接打开商户页面,完成支付。</li>
<li>将商户页面转换成二维码,用户扫描二维码后在微信/支付宝浏览器中打开页面后完成支付。</li>
</ul>
<p><strong>流程图</strong></p>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=00660394ba9a788472e56ebed5af2f54&amp;file=file.png" alt="" /></p>
<p><strong>流程说明</strong></p>
<ol>
<li>用户在微信/支付宝 APP 内选购商户商品后进行支付;</li>
<li>商户系统需要调用微信/支付宝官方的应用接口,微信的需要获取微信用户的 openId,支付宝的需要获取买家的支付宝唯一用户号(buyerId)或买家的支付宝账号(buyerLogonId);</li>
<li>微信官方返回微信用户的 openId,支付宝官方返回买家的支付宝唯一用户号(buyerId)或买家的支付宝账号(buyerLogonId);</li>
<li>商户调用“微信公众号支付/支付宝生活号支付”接口向易票联支付系统下单;</li>
<li>支付系统处理后返回相应的参数给到商户;</li>
<li>商户返回相应的参数给浏览器端;</li>
<li>微信/支付宝 APP 根据相应参数唤起微信或支付宝支付;</li>
<li>用户在微信/支付宝 APP 内完成支付;</li>
<li>如果支付成功,支付系统会通过“支付结果异步通知”接口通知商户,商户需要
接收处理;
10.商户如果未接收到支付结果,需要同时通过查询机制使用“支付结果查询”接口
查询支付结果;
11.根据商户的主动查询,支付系统会返回订单支付结果。</li>
</ol>
<p><strong>接口地址</strong></p>
<p><code>测试</code>
<code>http://xipay.xiangma365.com/api/openpay/v3/jspay</code></p>
<p><code>正式</code>
<code>https://cpay.xiangma365.com/openpay/v3/jspay</code></p>
<p><strong>请求方式</strong></p>
<p><code>POST</code></p>
<p><strong>请求头部</strong></p>
<p><code>Content-Type:application/json</code></p>
<p><strong>请求参数</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">约束</th>
<th style="text-align: left;">描述</th>
<th style="text-align: left;">示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">inst_no</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">机构号 ,通道分配</td>
<td style="text-align: left;">60000001</td>
</tr>
<tr>
<td style="text-align: left;">mch_no</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">商户号</td>
<td style="text-align: left;">Y52212200002</td>
</tr>
<tr>
<td style="text-align: left;">shop_no</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">门店号</td>
<td style="text-align: left;">86000033007</td>
</tr>
<tr>
<td style="text-align: left;">terminal_no</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">终端号或商务SN</td>
<td style="text-align: left;">70020283</td>
</tr>
<tr>
<td style="text-align: left;">pay_type</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">支付类型:300 支付宝,400 微信,600 云闪付</td>
<td style="text-align: left;">400</td>
</tr>
<tr>
<td style="text-align: left;">pay_trace_no</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">支付请求流水号(在商户系统内唯一)</td>
<td style="text-align: left;">werddtuoji0988</td>
</tr>
<tr>
<td style="text-align: left;">pay_time</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">支付请求时间,yyyyMMddHHmmss格式</td>
<td style="text-align: left;">20880907150901</td>
</tr>
<tr>
<td style="text-align: left;">total_amount</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">支付金额,单位:分</td>
<td style="text-align: left;">1</td>
</tr>
<tr>
<td style="text-align: left;">appid</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">公众号或小程序appid(不指定时取后台配置)</td>
<td style="text-align: left;">wx9bcfaaa7b194c038</td>
</tr>
<tr>
<td style="text-align: left;">open_id</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">用户标识:微信openid/支付宝userid,<strong>部分通道无需openid</strong></td>
<td style="text-align: left;">oqqMoxBMF8FgrF3K8GnxiRPIyhBI</td>
</tr>
<tr>
<td style="text-align: left;">notify_url</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">C</td>
<td style="text-align: left;">回调地址(无须ecode),支付成功时回调通知</td>
<td style="text-align: left;"><a href="http://open.sh.com">http://open.sh.com</a></td>
</tr>
<tr>
<td style="text-align: left;">order_body</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">订单描述</td>
<td style="text-align: left;">苹果笔记本</td>
</tr>
<tr>
<td style="text-align: left;">attach</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">自定义参数,原样返回</td>
<td style="text-align: left;">1234</td>
</tr>
<tr>
<td style="text-align: left;">goods_detail</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">详情内容,json格式字符串,详细见“goods_detail描述”</td>
<td style="text-align: left;">goods_detail”:[{\”goods_id\”:\”800510101\”,\”goods_name\”:\”ceshi\”,\”goods_price\”:\”40\”,\”goods_quantity\”:\”2\”}]”</td>
</tr>
<tr>
<td style="text-align: left;">share_type</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">分账类型:0.不分账,1.同步分账,2.异步分账,不传默认0</td>
<td style="text-align: left;">0</td>
</tr>
<tr>
<td style="text-align: left;">share_effect_time</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">C</td>
<td style="text-align: left;">异步分账有效时间(单位:天),share_type=”2”时必传,小于1取1,大于30取30,不传默认30</td>
<td style="text-align: left;">15</td>
</tr>
<tr>
<td style="text-align: left;">share_detail</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">C</td>
<td style="text-align: left;">分账详情,share_type=”1”时有效,json格式字符串,详细见“share_detail描述”</td>
<td style="text-align: left;">“{\”share_count\”:\”2\”,\”share_fee_mch\”:\”通道商户号1\”,\”share_array\”:[{\”share_mch\”:\”通道商户号2\”,\”share_amount\”:\”122\”},{\”share_mch\”:\”通道商户号3\”,\”share_amount\”:\”322\”}]}”</td>
</tr>
<tr>
<td style="text-align: left;">sign</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">签名字符串</td>
<td style="text-align: left;">920ff5b412adb411c6648948f2212fb9</td>
</tr>
</tbody>
</table>
<p><strong>share_detail描述</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">约束</th>
<th style="text-align: left;">描述</th>
<th style="text-align: left;">示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">goods_id</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">商品编号</td>
<td style="text-align: left;">8005</td>
</tr>
<tr>
<td style="text-align: left;">goods_name</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">商品名称</td>
<td style="text-align: left;">苹果</td>
</tr>
<tr>
<td style="text-align: left;">goods_quantity</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">商品数量</td>
<td style="text-align: left;">1</td>
</tr>
<tr>
<td style="text-align: left;">goods_price</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">商品单价,单位:分</td>
<td style="text-align: left;">100</td>
</tr>
</tbody>
</table>
<p><strong>share_detail描述</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">约束</th>
<th style="text-align: left;">描述</th>
<th style="text-align: left;">示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">share_count</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">分账条目数</td>
<td style="text-align: left;">8005</td>
</tr>
<tr>
<td style="text-align: left;">share_fee_mch</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">承担手续费的商户号</td>
<td style="text-align: left;">53005</td>
</tr>
<tr>
<td style="text-align: left;">share_array</td>
<td style="text-align: left;">JSONArray,详细见“share_array描述”</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">分账数组,json数组</td>
<td style="text-align: left;">1</td>
</tr>
</tbody>
</table>
<p><strong>share_array描述</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">约束</th>
<th style="text-align: left;">描述</th>
<th style="text-align: left;">示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">share_mch</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">通道商户号</td>
<td style="text-align: left;">53005</td>
</tr>
<tr>
<td style="text-align: left;">share_amount</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">分账金额,单位:分</td>
<td style="text-align: left;">100</td>
</tr>
</tbody>
</table>
<p><strong>请求示例(微信)</strong></p>
<pre><code>{
&quot;inst_no&quot;: 60000001,
&quot;mch_no&quot;: &quot;Y52212190001&quot;,
&quot;pay_type&quot;: &quot;400&quot;,
&quot;pay_trace_no&quot;: &quot;998877665544332001&quot;,
&quot;pay_time&quot;: &quot;20230227231190&quot;,
&quot;total_amount&quot;: &quot;1&quot;,
&quot;sign&quot;: &quot;ca80a3969b049138cbd27970c8d4639d&quot;
}</code></pre>
<p><strong>请求示例(支付宝)</strong></p>
<pre><code>{
&quot;inst_no&quot;: 60000001,
&quot;mch_no&quot;: &quot;Y52212190001&quot;,
&quot;pay_type&quot;: &quot;300&quot;,
&quot;pay_trace_no&quot;: &quot;998877665544332002&quot;,
&quot;pay_time&quot;: &quot;20230227231190&quot;,
&quot;total_amount&quot;: &quot;1&quot;,
&quot;sign&quot;: &quot;9351e0c41b6630fc594d1e1b8374439b&quot;
}</code></pre>
<p><strong>响应参数</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">约束</th>
<th style="text-align: left;">描述</th>
<th style="text-align: left;">示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">return_code</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">响应码:SUCCESS成功,FAIL失败,响应码仅代表通信或参数</td>
<td style="text-align: left;">SUCCESS</td>
</tr>
<tr>
<td style="text-align: left;">result_code</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">业务结果:PAY_SUCCESS 支付成功 ,PAY_IN_PROCESS 支付中 ,PAY_FAIL 支付失败,只有在return_code为SUCCESS时才会返回。</td>
<td style="text-align: left;">PAY_SUCCESS</td>
</tr>
<tr>
<td style="text-align: left;">return_msg</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">返回信息提示,“支付成功”,“支付中”,“参数不合法” 等</td>
<td style="text-align: left;">支付成功</td>
</tr>
<tr>
<td style="text-align: left;">pay_type</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">支付类型:300支付宝,400微信,600云闪付</td>
<td style="text-align: left;">300</td>
</tr>
<tr>
<td style="text-align: left;">mch_no</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">商户号</td>
<td style="text-align: left;">851811130002</td>
</tr>
<tr>
<td style="text-align: left;">mch_name</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">商户名称</td>
<td style="text-align: left;">小猫生活</td>
</tr>
<tr>
<td style="text-align: left;">shop_no</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">门店号</td>
<td style="text-align: left;">86000033007</td>
</tr>
<tr>
<td style="text-align: left;">shop_name</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">门店名称</td>
<td style="text-align: left;">小猫生活</td>
</tr>
<tr>
<td style="text-align: left;">pay_trace_no</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">支付请求流水号(商户系统内唯一)</td>
<td style="text-align: left;">51c7d68424e5492199cf7f4734a2b977</td>
</tr>
<tr>
<td style="text-align: left;">pay_time</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">请求交易时间,格式yyyyMMddHHmmss</td>
<td style="text-align: left;">20181116155621</td>
</tr>
<tr>
<td style="text-align: left;">total_amount</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">支付金额,单位:分</td>
<td style="text-align: left;">100</td>
</tr>
<tr>
<td style="text-align: left;">trade_no</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">订单号</td>
<td style="text-align: left;">20000002814118090716435200001</td>
</tr>
<tr>
<td style="text-align: left;">appId</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">C</td>
<td style="text-align: left;">微信公众号支付返回字段,公众号appId</td>
<td style="text-align: left;">wx9bcfaaa7b194c038</td>
</tr>
<tr>
<td style="text-align: left;">timeStamp</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">C</td>
<td style="text-align: left;">微信公众号支付返回字段,时间戳,部分系统取到的值为毫秒级,需要转换成秒(10位数字)</td>
<td style="text-align: left;">1414561699</td>
</tr>
<tr>
<td style="text-align: left;">nonceStr</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">C</td>
<td style="text-align: left;">微信公众号支付返回字段,随机字符串</td>
<td style="text-align: left;">1234</td>
</tr>
<tr>
<td style="text-align: left;">packages</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;"></td>
<td style="text-align: left;">微信公众号支付返回字段,订单详情扩展字符串,统一下单接口返回的prepay_id参数值,提交格式:prepay_id=123</td>
<td style="text-align: left;">prepay_id=123456789</td>
</tr>
<tr>
<td style="text-align: left;">signType</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">C</td>
<td style="text-align: left;">微信公众号支付返回字段,签名方式</td>
<td style="text-align: left;">MD5,RSA</td>
</tr>
<tr>
<td style="text-align: left;">paySign</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">C</td>
<td style="text-align: left;">微信公众号支付返回字段,签名</td>
<td style="text-align: left;"></td>
</tr>
<tr>
<td style="text-align: left;">ali_trade_no</td>
<td style="text-align: left;">object</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">支付宝JSAPI支付返回字段用于调起支付宝JSAPI</td>
<td style="text-align: left;"></td>
</tr>
<tr>
<td style="text-align: left;">attach</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">O</td>
<td style="text-align: left;">扩展字段原样返回</td>
<td style="text-align: left;">1234</td>
</tr>
<tr>
<td style="text-align: left;">code_url</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">C</td>
<td style="text-align: left;">跳转到该地址即可发起支付,与原生参数不同时返回</td>
<td style="text-align: left;"></td>
</tr>
<tr>
<td style="text-align: left;">sign</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">Y</td>
<td style="text-align: left;">签名字符串,拼装所有传递参数,UTF-8编码,32位md5加密转换签名字符串</td>
<td style="text-align: left;">336437c53711dd466154c4162cbe1c52</td>
</tr>
</tbody>
</table>
<p><strong>响应示例(微信)</strong></p>
<pre><code>{
&quot;return_code&quot;: &quot;SUCCESS&quot;,
&quot;return_msg&quot;: &quot;下单成功&quot;,
&quot;result_code&quot;: &quot;PAY_SUCCESS&quot;,
&quot;pay_type&quot;: &quot;400&quot;,
&quot;mch_name&quot;: &quot;升宝百货&quot;,
&quot;shop_name&quot;: &quot;&quot;,
&quot;mch_no&quot;: &quot;Y52212190001&quot;,
&quot;shop_no&quot;: &quot;&quot;,
&quot;pay_trace_no&quot;: &quot;998877665544332001&quot;,
&quot;pay_time&quot;: &quot;20230227231190&quot;,
&quot;total_amount&quot;: &quot;1&quot;,
&quot;trade_no&quot;: &quot;200001102F4323030419531110002&quot;,
&quot;appId&quot;: null,
&quot;timeStamp&quot;: null,
&quot;nonceStr&quot;: null,
&quot;packages&quot;: null,
&quot;signType&quot;: null,
&quot;paySign&quot;: null,
&quot;ali_trade_no&quot;: null,
&quot;attach&quot;: null,
&quot;code_url&quot;: &quot;https://pay.congmingpay.com/pay/buypay.do?shopId=5907536da7c0c3448df3eb8c3d57ee0c&amp;money=0.01&amp;orderId=200001102F4323030419531110002&amp;type=weixin&amp;device=2023001&amp;goodsMsg=&amp;sign=160E52B89B932D1919CBC12C98645763&amp;redirectUrl=http://xipay.xiangma365.com:8090/openpay/notify/cmfnotify&amp;returnUrl=http%3A%2F%2Fweb.cpo2o.com%2Fcnzz%2Findex.html%3Fid%3D26&amp;ver=2.1&amp;profitShareType=&amp;profitShareInfo=&amp;goodsTag=&amp;detail=&amp;program_id=&amp;pro_access_token=&quot;,
&quot;sign&quot;: &quot;336437c53711dd466154c4162cbe1c52&quot;
}</code></pre>
<p><strong>响应示例(支付宝)</strong></p>
<pre><code>{
&quot;return_code&quot;: &quot;SUCCESS&quot;,
&quot;return_msg&quot;: &quot;下单成功&quot;,
&quot;result_code&quot;: &quot;PAY_SUCCESS&quot;,
&quot;pay_type&quot;: &quot;300&quot;,
&quot;mch_name&quot;: &quot;升宝百货&quot;,
&quot;shop_name&quot;: &quot;&quot;,
&quot;mch_no&quot;: &quot;Y52212190001&quot;,
&quot;shop_no&quot;: &quot;&quot;,
&quot;pay_trace_no&quot;: &quot;998877665544332002&quot;,
&quot;pay_time&quot;: &quot;20230227231190&quot;,
&quot;total_amount&quot;: &quot;1&quot;,
&quot;trade_no&quot;: &quot;200001102F3323030420500210001&quot;,
&quot;appId&quot;: null,
&quot;timeStamp&quot;: null,
&quot;nonceStr&quot;: null,
&quot;packages&quot;: null,
&quot;signType&quot;: null,
&quot;paySign&quot;: null,
&quot;ali_trade_no&quot;: null,
&quot;attach&quot;: null,
&quot;code_url&quot;: &quot;https://pay.congmingpay.com/pay/buypay.do?shopId=5907536da7c0c3448df3eb8c3d57ee0c&amp;money=0.01&amp;orderId=200001102F3323030420500210001&amp;type=alipay&amp;device=202301&amp;goodsMsg=&amp;sign=B451AD45A5ACC9E04F35832A4CBC316B&amp;redirectUrl=http://xipay.xiangma365.com:8090/openpay/notify/cmfnotify&amp;returnUrl=http%3A%2F%2Fweb.cpo2o.com%2Fcnzz%2Findex.html%3Fid%3D26&amp;ver=2.1&amp;profitShareType=&amp;profitShareInfo=&amp;goodsTag=&amp;detail=&amp;program_id=&amp;pro_access_token=&quot;,
&quot;sign&quot;: &quot;57c29b1f4c6d56ddfb751f87c2ce9a4b&quot;
}</code></pre>