微信服务号 微信支付开发.docx
- 文档编号:4952495
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:14
- 大小:599.28KB
微信服务号 微信支付开发.docx
《微信服务号 微信支付开发.docx》由会员分享,可在线阅读,更多相关《微信服务号 微信支付开发.docx(14页珍藏版)》请在冰豆网上搜索。
微信服务号微信支付开发
微信服务号微信支付开发
1.发起支付,都是通过h5发起的,首先获取prepay_id
发起支付,需要统一下单的prepay_id
SortedMap
parameters.put("appid",ConfigUtil.APPID);
parameters.put("mch_id",ConfigUtil.MCH_ID);
parameters.put("nonce_str",PayCommonUtil.CreateNoncestr());
parameters.put("body",bodyorder);
parameters.put("out_trade_no",outTradeNo);//用户订单号
parameters.put("total_fee",totalfee);//标价金额(分)
//parameters.put("spbill_create_ip",IpAddressUtil.getIpAddr(request));
parameters.put("spbill_create_ip","192.168.1.1");//电脑测试
//parameters.put("spbill_create_ip",NetworkUtil.getIpAddress(request));
parameters.put("notify_url",ConfigUtil.NOTIFY_URL);
parameters.put("trade_type","JSAPI");
parameters.put("openid",openId);
Stringsign=PayCommonUtil.createSign("UTF-8",parameters);
parameters.put("sign",sign);
StringrequestXML=PayCommonUtil.getRequestXml(parameters);
Stringresult=CommonUtil.httpsRequestR2s(ConfigUtil.UNIFIED_ORDER_URL,"POST",requestXML);
System.out.println("第一弹数据"+result+"ip地址"+NetworkUtil.getIpAddress(request));
数据为
第一弹数据
[CDATA[SUCCESS]]>
[CDATA[OK]]>
[CDATA[wx06e68e38fcef451d]]>
[CDATA[1427607202]]>
[CDATA[vOK9ll6ZylQAOiRV]]>
[CDATA[4D7F2D8D55377493503F8BB9E2F94C8B]]>
[CDATA[SUCCESS]]>
[CDATA[wx20170105120958d7d94506790707606719]]>
[CDATA[JSAPI]]>
2.拿到prepay_id后,就可以发起支付
支付,需要设置测试路径和真实路径,
发起支付,将参数转为json,在放到respond里,然后h5页面从request里取
SortedMap
params.put("appId",ConfigUtil.APPID);
params.put("timeStamp",Long.toString(newDate().getTime()));
params.put("nonceStr",PayCommonUtil.CreateNoncestr());
System.out.println("订单id"+map.get("prepay_id"));
params.put("package","prepay_id="+map.get("prepay_id"));
params.put("signType",ConfigUtil.SIGN_TYPE);
StringpaySign=PayCommonUtil.createSign("UTF-8",params);
//params.put("packageValue","prepay_id="+map.get("prepay_id"));
////这里用packageValue是预防package是关键字在js获取值出错
params.put("paySign",paySign);//paySign的生成规则和Sign的生成规则一致
Stringjson=JSONObject.fromObject(params).toString();
System.out.println("第二弹数据"+json);
try{
response.setContentType("text/html"+";charset=UTF-8");
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
response.getWriter().write(json);
response.getWriter().flush();
}catch(IOExceptione){
e.printStackTrace();
}
}
上传,支付的html页面
DOCTYPEhtml>
--
-->
苏牌皮草
库存18件
原价:
8888元
现价:
5000
functioncheckWeiXinVersion(){
varwechatInfo=navigator.userAgent.match(/MicroMessenger\/([\d\.]+)/i);
if(!
wechatInfo){
alert("本活动仅支持微信");
}elseif(wechatInfo[1]<"5.0"){
alert("本活动仅支持微信5.0以上版本");
}
}
functiononBridgeReady(obj){
WeixinJSBridge.invoke('getBrandWCPayRequest',{
"appId":
obj.appId,//公众号名称,由商户传入
"timeStamp":
obj.timeStamp,//时间戳,自1970年以来的秒数
"nonceStr":
obj.nonceStr,//随机串
"package":
obj.package,// 微软雅黑;">商品包信息 "signType": obj.signType,//微信签名方式: "paySign": obj.paySign//微信签名 },function(res){ alert(res.err_msg); if(res.err_msg=="get_brand_wcpay_request: ok"){ window.location.href=" alert("f成功"); }else{ alert("fail"); window.location.href=" // 微软雅黑;">当失败后,继续跳转该支付页面让用户可以继续付款,贴别注意不能直接调转jsp, 10.5pt">不然会报 12.0pt">system: access_denied。 } }); } varbasePath="weiChatPayServlet"; $("#test").one("click",function(){ $.ajax({ type: "POST", url: basePath // 微软雅黑;">ajax调用微信统一接口获取prepayId }).done(function(data){ alert("数据"+data); console.log("数据为"+data); varobj=eval('('+data+')'); //varobj=eval("("+data+")");//转换为json对象 /*if(parseInt(obj.agent)<5){ alert("您的微信版本低于5.0无法使用微信支付"); return; }*/ /*//配置微信 wx.config({ debug: true,//开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: obj.appId,//必填,公众号的唯一标识 timestamp: obj.timeStamp,//必填,生成签名的时间戳 nonceStr: obj.nonceStr,//必填,生成签名的随机串 signature: obj.signature,//必填,签名,见附录1 jsApiList: ['chooseWXPay']//必填,需要使用的JS接口列表,所有JS接口列表见附录2 });*/ checkWeiXinVersion(); if(typeofWeixinJSBridge=="undefined"){ if(document.addEventListener){ document.addEventListener('WeixinJSBridgeReady',onBridgeReady,false); }elseif(document.attachEvent){ document.attachEvent('WeixinJSBridgeReady',onBridgeReady); document.attachEvent('onWeixinJSBridgeReady',onBridgeReady); } }else{ onBridgeReady(obj); } }); }); 3.支付后要查询自己的订单 在支付时,我会默认存一下,商家生成的订单(商户订单号),一个openid下n那个订单, 商户订单号,要求唯一性,为了测试,我获取的时间戳,但是商用,最好用每秒100000次不同的订单号,自己可以搜 我拿到自己的数据库的商户号后,就去掉订单查询 privateStringcheckOrder(StringoutTradeNo){ SortedMap parameters.put("appid",ConfigUtil.APPID); parameters.put("mch_id",ConfigUtil.MCH_ID); parameters.put("nonce_str",PayCommonUtil.CreateNoncestr()); parameters.put("out_trade_no",outTradeNo);//用户订单号 parameters.put("sign_type",ConfigUtil.SIGN_TYPE); Stringsign=PayCommonUtil.createSign("UTF-8",parameters); parameters.put("sign",sign); StringrequestXML=PayCommonUtil.getRequestXml(parameters); Stringresult=null; Map result=CommonUtil.httpsRequestR2s(ConfigUtil.CHECK_ORDER_URL,"POST",requestXML); try{ map=XMLUtil.doXMLParse(result); }catch(JDOMExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } if(map! =null){ StringreturnCode=map.get("return_code"); StringresultCode=map.get("result_code"); if(returnCode.equals("SUCCESS")&&resultCode.equals("SUCCESS")){ //System.out.println("returnCode结果为"+returnCode+"resultCode结果"+resultCode); //System.out.println("支付状态"+map.get("trade_state")); returnmap.get("trade_state"); }else{ return"noArrivePay";//为发起支付,没有到输入密码处直接退出 } }else{ returnnull; } } 直要查到为支付成功,就修改数据库,支付状态 4.微信支付退款,直接看pai,涉及到证书的 测试退款时,也可以自己登陆商户平台退款; 退款的servlet主要代码 SortedMap parameters.put("appid",ConfigUtil.APPID); parameters.put("mch_id",ConfigUtil.MCH_ID); parameters.put("nonce_str",PayCommonUtil.CreateNoncestr()); parameters.put("out_trade_no",outTradeNo);//用户订单号 parameters.put("out_refund_no",outRefundno);//商户退款单号 parameters.put("total_fee",totalFee);//订单金额 parameters.put("refund_fee",refundFee);//退款金额 parameters.put("op_user_id",ConfigUtil.MCH_ID);//操作员id parameters.put("sign_type",ConfigUtil.SIGN_TYPE); Stringsign=PayCommonUtil.createSign("UTF-8",parameters); parameters.put("sign",sign); StringrequestXML=PayCommonUtil.getRequestXml(parameters); Stringresult=ull; Map result=CommonUtil.httpsRequestR2s(ConfigUtil.REFUND_URL,"POST",requestXML); try{ map=XMLUtil.doXMLParse(result); }catch(JDOMExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } //退款微信证书相关 KeyStorekeyStore=null; FileInputStreaminstream=null; try{ keyStore=KeyStore.getInstance("PKCS12"); instream=newFileInputStream(newFile("D: /10016225.p12")); keyStore.load(instream,"10016225".toCharArray()); }catch(KeyStoreExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(NoSuchAlgorithmExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(CertificateExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }finally{ instream.close(); } //TrustownCAandallself-signedcerts SSLContextsslcontext=null; try{ sslcontext=SSLContexts.custom().loadKeyMaterial(keyStore,"10016225".toCharArray()).build(); }catch(KeyManagementExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(UnrecoverableKeyExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(NoSuchAlgorithmExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(KeyStoreExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } //AllowTLSv1protocolonly SSLConnectionSocketFactorysslsf=newSSLConnectionSocketFactory(sslcontext,newString[]{"TLSv1"},null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); CloseableHttpClienthttpclient=HttpClients.custom().setSSLSocketFactory(sslsf).build(); try{ HttpGethttpget=newHttpGet(" System.out.println("executingrequest"+httpget.getRequestLine()); CloseableHttpResponseresponseSJT=httpclient.execute(httpget); try{ HttpEntityentity=responseSJT.getEntity(); System.out.println("-----------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微信服务号 微信支付开发 服务 支付 开发