小程序支付
<h1>微信小程序支付下单接口</h1>
<p><strong>前提条件</strong></p>
<p>商户申请小程序或使用渠道小程序</p>
<p><strong>接口地址</strong></p>
<p><code>测试</code>
<code>http://xipay.xiangma365.com/api/openpay/v3/minipay</code></p>
<p><code>正式</code>
<code>https://cpay.xiangma365.com/openpay/v3/minipay</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;">open_id</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">用户标识:微信openid/支付宝userid</td>
<td style="text-align: left;">oqqMoxBMF8FgrF3K8GnxiRPIyhBI</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;">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;">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;">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;">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_detail</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">C</td>
<td style="text-align: left;">分账对账,jsonObject字符串,字符串需要转义,share_type=”1”时有效,详细见“share_detail描述”</td>
<td style="text-align: left;">{\"share_array\":[{\"share_mch\":\"6666000134662349\",\"share_amount\":\"1\"},{\"share_mch\":\"6666000134662348\",\"share_amount\":\"2\"}]}</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>goods_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_array</td>
<td style="text-align: left;">JSONArray</td>
<td style="text-align: left;">M</td>
<td style="text-align: left;">分账数组,json数组,详细见“share_array描述”</td>
<td style="text-align: left;">[{\"share_mch\":\"6666000134662349\",\"share_amount\":\"1\"},{\"share_mch\":\"6666000134662348\",\"share_amount\":\"2\"}]</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;">6666000134662349</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;">1</td>
</tr>
</tbody>
</table>
<p><strong>请求示例(微信小程序)</strong></p>
<pre><code>{
&quot;inst_no&quot;: &quot;60000001&quot;,
&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;open_id&quot;: &quot;1&quot;,
&quot;appid&quot;: &quot;1&quot;,
&quot;sign&quot;: &quot;ca80a3969b049138cbd27970c8d4639d&quot;
}</code></pre>
<p><strong>请求示例(微信小程序)【有分账参数】</strong></p>
<p>5%分账示例</p>
<pre><code>{
&quot;inst_no&quot;: &quot;60000001&quot;,
&quot;mch_no&quot;: &quot;852306060002&quot;,
&quot;pay_type&quot;: &quot;400&quot;,
&quot;pay_trace_no&quot;: &quot;maqwsz1taaag522443zx1s001&quot;,
&quot;pay_time&quot;: &quot;20230630184413&quot;,
&quot;auth_code&quot;: &quot;132257855069146866&quot;,
&quot;total_amount&quot;: &quot;20&quot;,
&quot;operator_id&quot;: &quot;1&quot;,
&quot;order_body&quot;: &quot;分账测试&quot;,
&quot;attach&quot;: &quot;888&quot;,
&quot;notify_url&quot;: &quot;http://cpay.xiangma365.com/openpay/common/test/notify&quot;,
&quot;share_type&quot;: &quot;1&quot;,
&quot;share_detail&quot;:&quot;{\&quot;share_array\&quot;:[{\&quot;share_mch\&quot;:\&quot;6666000134662349\&quot;,\&quot;share_amount\&quot;:\&quot;19\&quot;},{\&quot;share_mch\&quot;:\&quot;6666000134657023\&quot;,\&quot;share_amount\&quot;:\&quot;1\&quot;}]}&quot;,
&quot;sign&quot;: &quot;5441d778d564d452de491fd4e06c37ee&quot;
}
</code></pre>
<p>生成签名提示:
待签名字符串(只过滤null):
attach=888&auth_code=132257855069146866&inst_no=60000001&mch_no=852306060002&notify_url=<a href="http://cpay.xiangma365.com/openpay/common/test/notify">http://cpay.xiangma365.com/openpay/common/test/notify</a> &operator_id=1&order_body=分账测试&pay_time=20230630184413&pay_trace_no=maqwsz1taaag522443zx1s001&pay_type=400&share_detail={\"share_array\":[{\"share_mch\":\"6666000134662349\",\"share_amount\":\"19\"},{\"share_mch\":\"6666000134657023\",\"share_amount\":\"1\"}]}&share_type=1&total_amount=20&key=72fde5d00fb44e5784d80b45fc620167</p>
<p>签名结果:
5441d778d564d452de491fd4e06c37ee</p>
<p><strong>请求示例(微信小程序)</strong>
<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></code></pre>
<p><strong>响应示例(支付宝)</strong></p>
<pre><code></code></pre>
<h3><strong>对接流程</strong></h3>
<p><strong>1.通过授权获取用户 open_id</strong></p>
<ul>
<li>
<p>小程序端调用 wx.login(Object object)接口 [获取登录凭证(code)](<a href="https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html">https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html</a> "获取登录凭证(code)")</p>
</li>
<li>商户服务端使用第一步获取的code 换取 open_id ,后台调用接口 [获取openID](<a href="https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html">https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html</a> "获取openID")</li>
</ul>
<pre><code>GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&amp;secret=SECRET&amp;js_code=JSCODE&amp;grant_type=authorization_code</code></pre>
<p>商户也可以使用以下接口获取openid:
接口地址:<a href="http://xipay.xiangma365.com/api/openpay/jsapi/getminiopenid">http://xipay.xiangma365.com/api/openpay/jsapi/getminiopenid</a>
请求方式 POST
请求头部 Content-Type:application/json
请求参数:</p>
<pre><code>{'code':res.code,'appid':appid,'secret':secret,'mch_no':mch_no}</code></pre>
<p>(其中参数appid/secret与mch_no二选择一,选择mch_no时使用渠道小程序获取openid)</p>
<p>示例如下:</p>
<pre><code>wx.login({
provider: &quot;weixin&quot;,
success: res =&gt; {
console.log('code=====',res.code);
//u商户小程序appid和secret
const appid = 'wx1cdb34ade5d35a4d'; // 微信小程序appid
const secret = '96f8a00c73fddddfbcdc9121b0806ff4'; // 微信小程序secret
//调用request请求api转换登录凭证
wx.request({
url: 'http://xipay.xiangma365.com/api/openpay/jsapi/getminiopenid',
data:{
'code':res.code,
'appid':appid,
'secret':secret
},
method:'POST',
header: {
'content-type': 'application/json'
},
success: function (result) {
if(result.statusCode === 200) {
console.log('openid=======',result.data.data);
// uni.setStorageSync('openid', result.data.openid);
// uni.setStorageSync('session_key', result.data.session_key);
}
}
})
}
}) </code></pre>
<p><strong>2.商户服务端使用 open_id 下单</strong></p>
<p>接口使用上述接口:小程序支付
请求参数</p>
<pre><code>{
&quot;inst_no&quot;: 60000001,
&quot;mch_no&quot;: &quot;Y52212190001&quot;,
&quot;open_id&quot;: &quot;oyf3m5sNmCpb4lkZc-iGG30CHztg&quot;,
&quot;pay_type&quot;: &quot;400&quot;,
&quot;pay_trace_no&quot;: &quot;998877665544332009&quot;,
&quot;pay_time&quot;: &quot;20230227231190&quot;,
&quot;total_amount&quot;: &quot;1&quot;,
&quot;sign&quot;: &quot;ac6e3889707135f9d244ab088fc3e75b&quot;
}</code></pre>
<p><strong>3.小程序端发起支付</strong></p>
<p>小程序端使用返回的参数发起支付
调用wx.requestPayment(OBJECT)发起微信支付</p>
<pre><code>wx.requestPayment(
{
'timeStamp': '',
'nonceStr': '',
'package': '',
'signType': 'MD5',
'paySign': '',
'success':function(res){},
'fail':function(res){},
'complete':function(res){}
})</code></pre>