新零售支付全家桶


创建支付订单的接口说明

<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&amp;groupid=00</td> <td>trade_type=NATIVE时有返回,此url用于生成支付二维码,然后提供给用户进行扫码支付。 注意:code_url的值并非固定,使用时按照URL格式转成二维码即可</td> </tr> </tbody> </table> <pre><code class="language-xml">&lt;xml&gt; &lt;return_code&gt;&lt;![CDATA[SUCCESS]]&gt;&lt;/return_code&gt; &lt;return_msg&gt;&lt;![CDATA[OK]]&gt;&lt;/return_msg&gt; &lt;appid&gt;&lt;![CDATA[wx2421b1c4370ec43b]]&gt;&lt;/appid&gt; &lt;mch_id&gt;&lt;![CDATA[10000100]]&gt;&lt;/mch_id&gt; &lt;nonce_str&gt;&lt;![CDATA[IITRi8Iabbblz1Jc]]&gt;&lt;/nonce_str&gt; &lt;openid&gt;&lt;![CDATA[oUpF8uMuAJO_M2pxb1Q9zNjWeS6o]]&gt;&lt;/openid&gt; &lt;sign&gt;&lt;![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]&gt;&lt;/sign&gt; &lt;result_code&gt;&lt;![CDATA[SUCCESS]]&gt;&lt;/result_code&gt; &lt;prepay_id&gt;&lt;![CDATA[wx201411101639507cbf6ffd8b0779950874]]&gt;&lt;/prepay_id&gt; &lt;trade_type&gt;&lt;![CDATA[JSAPI]]&gt;&lt;/trade_type&gt; &lt;/xml&gt;</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>

页面列表

ITEM_HTML