100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java微信支付 [统一下单接口] 与 [订单查询接口] 调用成功完整代码与结果

java微信支付 [统一下单接口] 与 [订单查询接口] 调用成功完整代码与结果

时间:2019-02-02 11:58:50

相关推荐

java微信支付 [统一下单接口] 与 [订单查询接口] 调用成功完整代码与结果

公司最近要搞微信支付, 之前也没有做过, 但是搞过阿里云, 想来也不是很难. 在网上找了很多贴子, 在eclipse里做了5个测试工程, 没有测试成功, 后来下了微信SDK, 也做了个测试样例, 期间参考了:/t_james/article/details/84653827#comments

第一步, 下SDK,https://pay./wiki/doc/api/app/app.php?chapter=11_1

第二步, 准备公众号appid,商业号(MchID), key, 参考:https://pay./wiki/doc/api/micropay.php?chapter=3_1获得,

这个是需要公司去注册与申请的,

第三步, 开通支付模式, 这里要是扫码支付(Native支付), 支付模式介绍见:https://pay./wiki/doc/api/native.php?chapter=2_1

第四步, 把工程导入eclipse, 完整如下图:

以下是完整代码, 搞多了大家不理解, 就一个类:

package com.github.wxpay.test;import java.util.Map;import java.util.SortedMap;import java.util.TreeMap;import com.github.wxpay.sdk.WXPay;import com.github.wxpay.sdk.WXPayUtil;import com.github.wxpay.sdk.WxPayConfigImpl;/*** 签名验证工具地址:* https://pay./wiki/doc/api/app/app.php?chapter=20_1* * 统一下单API说明: * https://pay./wiki/doc/api/native.php?chapter=9_1* @author 123**/public class Test {public static void main(String[] args) {// TODO Auto-generated method stub//unifiedOrder();orderQuery();}/*** 统一下单接口<br>* 场景:公共号支付、扫码支付、APP支付*/public static void unifiedOrder (){try {//sdk类引用WxPayConfigImpl config = WxPayConfigImpl.getInstance();WXPay pyPay = new WXPay(config);//订单号 (调整为自己的生产逻辑)String out_trade_no = config.getMchID()+"-" + System.currentTimeMillis(); //公众号appidString appid = config.getAppID(); //商业号 String mch_id = config.getMchID(); //keyString key = config.getKey(); //随机数String nonce_str = WXPayUtil.generateNonceStr(); //获取发起电脑 ip,可以用百度之类的代替来测试String spbill_create_ip = "123.123.123.123";//回调接口(反正本机测试时不用,随意搞一个能访问的)String notify_url = "http://www./wxpay/pay.php";//模式String trade_type = "NATIVE";//"JSAPI";SortedMap<String,String> packageParams = new TreeMap<String,String>(); packageParams.put("appid", appid);packageParams.put("mch_id", mch_id);packageParams.put("nonce_str", nonce_str);packageParams.put("body", "test-coke"); //(调整为自己的名称)格式: 腾讯充值中心-QQ会员充值packageParams.put("out_trade_no", out_trade_no);packageParams.put("total_fee", "10"); //价格的单位为分packageParams.put("spbill_create_ip", spbill_create_ip);packageParams.put("notify_url", notify_url);packageParams.put("trade_type", trade_type);Map runMap = pyPay.unifiedOrder(packageParams);System.out.println("=============returnXml==============");System.out.println(runMap.toString());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//发送://<?xml version="1.0" encoding="UTF-8" standalone="no"?>//<xml>//<appid>公众号APPID</appid>//<body>test-coke</body>//<mch_id>自己的商户号</mch_id>//<nonce_str>rE8iTtCENf4VSOtOCZ0PIbkuuNklyFpw</nonce_str>//<notify_url>http://www./wxpay/pay.php</notify_url>//<out_trade_no>自己的商户号-1561942616146</out_trade_no>//<sign>907192B0875A02F199B45B7F30356644751DF6D4A2AFA77C0F3C226E4A60D276</sign>//<sign_type>HMAC-SHA256</sign_type>//<spbill_create_ip>123.123.123.123</spbill_create_ip>//<total_fee>10</total_fee>//<trade_type>NATIVE</trade_type>//</xml>//结果://<xml><return_code><![CDATA[SUCCESS]]></return_code>//<return_msg><![CDATA[OK]]></return_msg>//<appid><![CDATA[公众号APPID]]></appid>//<mch_id><![CDATA[自己的商户号]]></mch_id>//<nonce_str><![CDATA[ayhkOwhZysjBQNR6]]></nonce_str>//<sign><![CDATA[021F45467BA5119C389D5F08D768CC5A635687057BBD6445E6B7A1BBB34F4AA9]]></sign>//<result_code><![CDATA[SUCCESS]]></result_code>//<prepay_id><![CDATA[wx010855154971807287de77f31587946700]]></prepay_id>//<trade_type><![CDATA[NATIVE]]></trade_type>//<code_url><![CDATA[weixin://wxpay/bizpayurl?pr=kMwACCs]]></code_url>//</xml>//解释后内容//{nonce_str=ayhkOwhZysjBQNR6, code_url=weixin://wxpay/bizpayurl?pr=kMwACCs, appid=公众号APPID, sign=021F45467BA5119C389D5F08D768CC5A635687057BBD6445E6B7A1BBB34F4AA9, trade_type=NATIVE, return_msg=OK, result_code=SUCCESS, mch_id=自己的商户号, return_code=SUCCESS, prepay_id=wx010855154971807287de77f31587946700}}/*** 查询订单接口<br>* 场景:刷卡支付、公共号支付、扫码支付、APP支付*/public static void orderQuery(){try {//sdk类引用WxPayConfigImpl config = WxPayConfigImpl.getInstance();WXPay pyPay = new WXPay(config);//订单号 String out_trade_no = "自己的商户号-1561942616146"; //appid String appid = config.getAppID();//商业号 String mch_id = config.getMchID();//随机数String nonce_str = WXPayUtil.generateNonceStr(); //模式String trade_type = "NATIVE";//"JSAPI";SortedMap<String,String> packageParams = new TreeMap<String,String>(); packageParams.put("appid", appid);packageParams.put("mch_id", mch_id);packageParams.put("nonce_str", nonce_str);packageParams.put("out_trade_no", out_trade_no);Map runMap = pyPay.orderQuery(packageParams);System.out.println("=============returnXml==============");System.out.println(runMap.toString());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//发送//<?xml version="1.0" encoding="UTF-8" standalone="no"?>//<xml>//<appid>公众号APPID</appid>//<mch_id>自己的商户号</mch_id>//<nonce_str>epQ1ZECqQryQJv0ZOybGc8XIjWTJupNX</nonce_str>//<out_trade_no>自己的商户号-1561942616146</out_trade_no>//<sign>366964520A9209243A714EAB55D46E542B56152E705814D4DB20FF1567511DA9</sign>//<sign_type>HMAC-SHA256</sign_type>//</xml>//结果://<xml><return_code><![CDATA[SUCCESS]]></return_code>//<return_msg><![CDATA[OK]]></return_msg>//<appid><![CDATA[公众号APPID]]></appid>//<mch_id><![CDATA[自己的商户号]]></mch_id>//<device_info><![CDATA[]]></device_info>//<nonce_str><![CDATA[dewGq9USU04gFwUE]]></nonce_str>//<sign><![CDATA[94D3B1BFB852E19CB3F421DBC23D5A3AE5A7CBDC9448C8B146959036141EFE2F]]></sign>//<result_code><![CDATA[SUCCESS]]></result_code>//<total_fee>10</total_fee>//<out_trade_no><![CDATA[自己的商户号-1561942616146]]></out_trade_no>//<trade_state><![CDATA[NOTPAY]]></trade_state>//<trade_state_desc><![CDATA[订单未支付]]></trade_state_desc>//</xml>}}

注:WxPayConfigImpl,WXPayDomainSimpleImpl 实现 参考这位兄弟的微博

/t_james/article/details/84653827#comments

代码里的 [公众号APPID], [商户号], [key], [发起电脑 ip] 这几个换成自己公司的或自己客户的相关内容

统一下单接口说明: 调用代码成功收到微信的回复, 这个测试是微信返回一个二维码连接code_url, 拿到code_url内容之后, 自己可以用google二维码工具显示到jsp页面上, 然后用手机扫描支付. 只要后台代码能与微信交互, 有没有页面都不重要.

订单查询接口: 这样列子中下单之后, 自己的代码要每隔2-3秒查询一次微信, 看看订单是不是支付成功了, 成功了说明客户支付了.

整个流程如下: 调用[统一下单接口] -->把某个订单, 某个商品下单----> 调用成功收到微信的code_url ------> 自己用二维码工具生成二维码 ------> 客户扫描二维码 ------> 每隔几秒调用[订单查询接口] -------> 支付成功则完成交易.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。