创建支付订单的接口说明
<p>生成支付订单的微信API接口,同学们可以访问这个地址。里面有接口的详细说明。为了节省时间,我就提取了其中必须上传的一些参数,给大家讲解一下,一会儿我们调用SDK程序的时候,传入这些参数即可。</p>
<p><a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1">https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1</a> </p>
<h3>请求参数</h3>
<table>
<thead>
<tr>
<th style="text-align: center;">参数</th>
<th style="text-align: center;">含义</th>
<th style="text-align: center;">类型</th>
<th style="text-align: center;">案例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">appid</td>
<td style="text-align: center;">公众号</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">wxd678efh567hg6787</td>
</tr>
<tr>
<td style="text-align: center;">mch_id</td>
<td style="text-align: center;">商户号</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">1230000109</td>
</tr>
<tr>
<td style="text-align: center;">nonce_str</td>
<td style="text-align: center;">随机字符串</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">5K8264ILTKCH16CQ2502SI8ZNMTM67VS</td>
</tr>
<tr>
<td style="text-align: center;">sign</td>
<td style="text-align: center;">数字签名</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">C380BEC2BFD727A4B6845133519F3AD6</td>
</tr>
<tr>
<td style="text-align: center;">body</td>
<td style="text-align: center;">备注信息</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">QQ会员充值</td>
</tr>
<tr>
<td style="text-align: center;">out_trade_no</td>
<td style="text-align: center;">商品订单号</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">20150806125346</td>
</tr>
<tr>
<td style="text-align: center;">total_fee</td>
<td style="text-align: center;">订单金额</td>
<td style="text-align: center;">INT</td>
<td style="text-align: center;">150</td>
</tr>
<tr>
<td style="text-align: center;">spbill_create_ip</td>
<td style="text-align: center;">终端IP</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">123.12.12.123</td>
</tr>
<tr>
<td style="text-align: center;">notify_url</td>
<td style="text-align: center;">通知地址</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;"><a href="https://www.demo.com/test">https://www.demo.com/test</a></td>
</tr>
<tr>
<td style="text-align: center;">trade_type</td>
<td style="text-align: center;">交易类型</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">JSAPI</td>
</tr>
<tr>
<td style="text-align: center;">openid</td>
<td style="text-align: center;">微信用户标识</td>
<td style="text-align: center;">String</td>
<td style="text-align: center;">1Q9zNjWeS6o</td>
</tr>
</tbody>
</table>
<ul>
<li>
<p>appid参数是商户的公众号ID,也就是注册小程序账号时候得到的app-id</p>
</li>
<li>
<p>mch_id参数是商户号,申请微信支付的时候,可以在微信商户平台的网站上面得到商户号</p>
</li>
<li>
<p>nonce_str参数是随机字符串,这个可以用微信支付的SDK程序来生成</p>
</li>
<li>
<p>sign参数是签名字符串,签名字符串,就是我们对上传的数据做MD5计算,得到的结果就是签名字符串了。SDK程序可以帮我们完成这个功能。对上传的数据做签名,一方面预防数据丢包,另外一方面放置数据在网络传输过程中被篡改。所以微信平台收到数据之后,重新计算一下数字签名。跟提交上来的数字签名比较一下就知道了。</p>
</li>
<li>
<p>body参数是商品的概要描述,这个内容你可以随便写,是给支付订单做备注的,一般写的都是商品的名称。确认支付之前,小程序会拿着商户的支付参数,去微信平台搜索支付订单,然后用户手机上就会出现这个支付订单的信息了。其中就有订单的概要描述。这就是现在这个参数的用途</p>
</li>
<li>
<p>out_trade_no参数是商户订单号,你自己定义,或者用SDK程序生成,都是可以的</p>
</li>
<li>
<p>total_fee参数是订单金额,整数类型,单位不是元,而是分</p>
</li>
<li>
<p>spbill_create_ip参数是终端的IP地址,这里我们上传Cetus主机的IP地址即可,你写什么IP地址,都不会影响到微信支付的</p>
</li>
<li>
<p>notify_url参数是通知地址,这个参数非常重要。因为将来微信支付成功以后,微信平台会把支付成功的结果发送给cetus项目,这里写的就是cetus项目接收支付结果的URL路径。如果这个地址写错了,倒是不会影响到微信支付,只是在支付成功以后,微信平台会每隔几分钟发送一次通知请求。如果没有响应,发过若干次通知之后,微信平台就不会发送通知了。因为cetus项目还没有发布,没有固定网址,所以我们写程序的时候,这个回调地址可以先随便写一个,等将来我们把cetus项目部署在腾讯云上面,再把这个回调通知地址改成真实的网址即可。</p>
</li>
<li>
<p>trade_type参数是交易类型,固定写成JSAPI</p>
</li>
<li>openid参数也就是微信用户登陆小程序时候,传给cetus项目的参数</li>
</ul>
<h3>响应结果</h3>
<table>
<thead>
<tr>
<th>字段名</th>
<th>变量名</th>
<th>必填</th>
<th>类型</th>
<th>示例值</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>返回状态码</td>
<td>return_code</td>
<td>是</td>
<td>String(16)</td>
<td>SUCCESS</td>
<td>SUCCESS/FAIL 此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断</td>
</tr>
<tr>
<td>返回信息</td>
<td>return_msg</td>
<td>否</td>
<td>String(128)</td>
<td>签名失败</td>
<td>返回信息,如非空,为错误原因 签名失败 参数格式校验错误</td>
</tr>
</tbody>
</table>
<p>以下字段在return_code为SUCCESS的时候有返回 </p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>变量名</th>
<th>必填</th>
<th>类型</th>
<th>示例值</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>小程序ID</td>
<td>appid</td>
<td>是</td>
<td>String(32)</td>
<td>wx8888888888888888</td>
<td>调用接口提交的小程序ID</td>
</tr>
<tr>
<td>商户号</td>
<td>mch_id</td>
<td>是</td>
<td>String(32)</td>
<td>1900000109</td>
<td>调用接口提交的商户号</td>
</tr>
<tr>
<td>设备号</td>
<td>device_info</td>
<td>否</td>
<td>String(32)</td>
<td>013467007045764</td>
<td>自定义参数,可以为请求支付的终端设备号等</td>
</tr>
<tr>
<td>随机字符串</td>
<td>nonce_str</td>
<td>是</td>
<td>String(32)</td>
<td>5K8264ILTKCH16CQ2502SI8ZNMTM67VS</td>
<td>微信返回的随机字符串</td>
</tr>
<tr>
<td>签名</td>
<td>sign</td>
<td>是</td>
<td>String(64)</td>
<td>C380BEC2BFD727A4B6845133519F3AD6</td>
<td>微信返回的签名值,详见<a href="https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3">签名算法</a></td>
</tr>
<tr>
<td>业务结果</td>
<td>result_code</td>
<td>是</td>
<td>String(16)</td>
<td>SUCCESS</td>
<td>SUCCESS/FAIL</td>
</tr>
<tr>
<td>错误代码</td>
<td>err_code</td>
<td>否</td>
<td>String(32)</td>
<td>SYSTEMERROR</td>
<td>详细参见下文错误列表</td>
</tr>
<tr>
<td>错误代码描述</td>
<td>err_code_des</td>
<td>否</td>
<td>String(128)</td>
<td>系统错误</td>
<td>错误信息描述</td>
</tr>
</tbody>
</table>
<p>以下字段在return_code 和result_code都为SUCCESS的时候有返回 </p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>变量名</th>
<th>必填</th>
<th>类型</th>
<th>示例值</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>交易类型</td>
<td>trade_type</td>
<td>是</td>
<td>String(16)</td>
<td>JSAPI</td>
<td>交易类型,取值为:JSAPI,NATIVE,APP等,说明详见<a href="https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_2">参数规定</a></td>
</tr>
<tr>
<td>预支付交易会话标识</td>
<td>prepay_id</td>
<td>是</td>
<td>String(64)</td>
<td>wx201410272009395522657a690389285100</td>
<td>微信生成的预支付会话标识,用于后续接口调用中使用,该值有效期为2小时</td>
</tr>
<tr>
<td>二维码链接</td>
<td>code_url</td>
<td>否</td>
<td>String(64)</td>
<td>weixin://wxpay/bizpayurl/up?pr=NwY5Mz9&groupid=00</td>
<td>trade_type=NATIVE时有返回,此url用于生成支付二维码,然后提供给用户进行扫码支付。 注意:code_url的值并非固定,使用时按照URL格式转成二维码即可</td>
</tr>
</tbody>
</table>
<pre><code class="language-xml"><xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
<openid><![CDATA[oUpF8uMuAJO_M2pxb1Q9zNjWeS6o]]></openid>
<sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
<trade_type><![CDATA[JSAPI]]></trade_type>
</xml></code></pre>
<h3>错误码</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>描述</th>
<th>原因</th>
<th>解决方案</th>
</tr>
</thead>
<tbody>
<tr>
<td>INVALID_REQUEST</td>
<td>参数错误</td>
<td>参数格式有误或者未按规则上传</td>
<td>订单重入时,要求参数值与原请求一致,请确认参数问题</td>
</tr>
<tr>
<td>NOAUTH</td>
<td>商户无此接口权限</td>
<td>商户未开通此接口权限</td>
<td>请商户前往申请此接口权限</td>
</tr>
<tr>
<td>NOTENOUGH</td>
<td>余额不足</td>
<td>用户帐号余额不足</td>
<td>用户帐号余额不足,请用户充值或更换支付卡后再支付</td>
</tr>
<tr>
<td>ORDERPAID</td>
<td>商户订单已支付</td>
<td>商户订单已支付,无需重复操作</td>
<td>商户订单已支付,无需更多操作</td>
</tr>
<tr>
<td>ORDERCLOSED</td>
<td>订单已关闭</td>
<td>当前订单已关闭,无法支付</td>
<td>当前订单已关闭,请重新下单</td>
</tr>
<tr>
<td>SYSTEMERROR</td>
<td>系统错误</td>
<td>系统超时</td>
<td>系统异常,请用相同参数重新调用</td>
</tr>
<tr>
<td>APPID_NOT_EXIST</td>
<td>APPID不存在</td>
<td>参数中缺少APPID</td>
<td>请检查APPID是否正确</td>
</tr>
<tr>
<td>MCHID_NOT_EXIST</td>
<td>MCHID不存在</td>
<td>参数中缺少MCHID</td>
<td>请检查MCHID是否正确</td>
</tr>
<tr>
<td>APPID_MCHID_NOT_MATCH</td>
<td>appid和mch_id不匹配</td>
<td>appid和mch_id不匹配</td>
<td>请确认appid和mch_id是否匹配</td>
</tr>
<tr>
<td>LACK_PARAMS</td>
<td>缺少参数</td>
<td>缺少必要的请求参数</td>
<td>请检查参数是否齐全</td>
</tr>
<tr>
<td>OUT_TRADE_NO_USED</td>
<td>商户订单号重复</td>
<td>同一笔交易不能多次提交</td>
<td>请核实商户订单号是否重复提交</td>
</tr>
<tr>
<td>SIGNERROR</td>
<td>签名错误</td>
<td>参数签名结果不正确</td>
<td>请检查签名参数和方法是否都符合签名算法要求</td>
</tr>
<tr>
<td>XML_FORMAT_ERROR</td>
<td>XML格式错误</td>
<td>XML格式错误</td>
<td>请检查XML参数格式是否正确</td>
</tr>
<tr>
<td>REQUIRE_POST_METHOD</td>
<td>请使用post方法</td>
<td>未使用post传递参数</td>
<td>请检查请求参数是否通过post方法提交</td>
</tr>
<tr>
<td>POST_DATA_EMPTY</td>
<td>post数据为空</td>
<td>post数据不能为空</td>
<td>请检查post数据是否为空</td>
</tr>
<tr>
<td>NOT_UTF8</td>
<td>编码格式错误</td>
<td>未使用指定编码格式</td>
<td>请使用UTF-8编码格式</td>
</tr>
</tbody>
</table>