微信公众号支付接口网页开发示例
2016-01-01 00:00
573 查看
摘要: 微信支付分成很多场景,有微信内嵌网页支付,app支付,公众号支付等,本文是微信公众号支付的示例步骤,其他场景其实很类似。
微信公众号支付开发步骤如下:
(1)首先开通支付。
(2)将用户openid传递到支付链接的参数中,例如:buy.jsp?id=productid&openid=user_openid
(3)先写好支付通知结果接口(notify_url),尝试8次直到我们回应,示例代码如下:
public String weixinNotify(HttpServletRequest request,
HttpServletResponse response) {
try {
response.setCharacterEncoding("UTF-8");
InputStream inStream = request.getInputStream();
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
String resultStr = new String(outSteam.toByteArray(), "utf-8");
Map<String, String> resultMap =MessageUtil.parseXml(resultStr);
String out_trade_no = resultMap.get("out_trade_no");//订单号
String return_code = resultMap.get("return_code");
String mch_id=resultMap.get("mch_id");
if (return_code.contains("SUCCESS")) {
// 此处就是你的逻辑代码
if (mch_id.equals(WeixinUtil.MCH_ID)){
OrderLogic.finishOrder(out_trade_no);//处理该订单的状态
}
}
//返回消息给微信服务器
String retXml = "<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg></xml>";
PrintWriter out = response.getWriter();
out.print(retXml);
out.close();
} catch (Exception e) {
e.printStackTrace();
&
7fe0
nbsp; }
return "success";//这句话可以不用吧?
}
(4)Js端代码:
商品页面增加以下代码就会调用支付流程:
(5)还需要预先调用预下单接口才行,这部分代码暂时找不到了,后面补充。
写的不是很流畅,第一次写,感觉微信支付接口挺绕的。
微信用户在不同的公众号里时候openid值是不一样的,因此在支付的时候要先将用户的openid获取到传递给支付页面。获取openid一个方式是通过Oauth链接,就是说先进入Oauth地址,将H5页面url作为参数传递给Oauth链接,微信会回调这个url并将随机的code传给这个H5,通过code来查询微信api获取openid值。
微信公众号支付开发步骤如下:
(1)首先开通支付。
(2)将用户openid传递到支付链接的参数中,例如:buy.jsp?id=productid&openid=user_openid
(3)先写好支付通知结果接口(notify_url),尝试8次直到我们回应,示例代码如下:
public String weixinNotify(HttpServletRequest request,
HttpServletResponse response) {
try {
response.setCharacterEncoding("UTF-8");
InputStream inStream = request.getInputStream();
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
String resultStr = new String(outSteam.toByteArray(), "utf-8");
Map<String, String> resultMap =MessageUtil.parseXml(resultStr);
String out_trade_no = resultMap.get("out_trade_no");//订单号
String return_code = resultMap.get("return_code");
String mch_id=resultMap.get("mch_id");
if (return_code.contains("SUCCESS")) {
// 此处就是你的逻辑代码
if (mch_id.equals(WeixinUtil.MCH_ID)){
OrderLogic.finishOrder(out_trade_no);//处理该订单的状态
}
}
//返回消息给微信服务器
String retXml = "<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg></xml>";
PrintWriter out = response.getWriter();
out.print(retXml);
out.close();
} catch (Exception e) {
e.printStackTrace();
&
7fe0
nbsp; }
return "success";//这句话可以不用吧?
}
(4)Js端代码:
商品页面增加以下代码就会调用支付流程:
function onBridgeReady() { var appId = $('#appId').val();// getUrlParam('appId'); var timeStamp = $('#timeStamp').val();// getUrlParam('timeStamp'); var nonceStr = $('#nonceStr').val();// getUrlParam('nonceStr'); var Package = $('#packageid').val();// getUrlParam('package'); var signType = $('#signType').val();// getUrlParam('signType'); var paySign = $('#paySign').val();// getUrlParam('paySign'); WeixinJSBridge.invoke('getBrandWCPayRequest', { "appId" : appId, //公众号名称,由商户传入 "timeStamp" : timeStamp,// "1395712654", //时间戳,自1970年以来的秒数 "nonceStr" : nonceStr,// "e61463f8efa94090b1f366cccfbbb444", //随机串 "package" : Package,// "prepay_id=u802345jgfjsdfgsdg888", "signType" : signType,// "MD5", //微信签名方式: "paySign" : paySign,// "70EA570631E4BB79628FBCA90534C63FF7FADD89" // //微信签名 }, function(res) { // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 // ok,但并不保证它绝对可靠。 // alert(res.err_msg); if (res.err_msg == "get_brand_wcpay_request:ok") { alert("success"); } if (res.err_msg == "get_brand_wcpay_request:cancel") { alert("cancel"); } if (res.err_msg == "get_brand_wcpay_request:fail") { alert("fail"); } }); } function callPay() { if (typeof WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } } else { onBridgeReady(); } }
(5)还需要预先调用预下单接口才行,这部分代码暂时找不到了,后面补充。
写的不是很流畅,第一次写,感觉微信支付接口挺绕的。
微信用户在不同的公众号里时候openid值是不一样的,因此在支付的时候要先将用户的openid获取到传递给支付页面。获取openid一个方式是通过Oauth链接,就是说先进入Oauth地址,将H5页面url作为参数传递给Oauth链接,微信会回调这个url并将随机的code传给这个H5,通过code来查询微信api获取openid值。
相关文章推荐
- Android仿微信语音聊天
- 【玩转微信公众平台之中的一个】序章(纯粹扯淡)
- java微信公众号开发
- cas sso 4.0 集成OAuth,用微信登陆示例
- 安卓版本微信多开
- HTML5网页如何调用浏览器APP的微信分享功能
- iOS --微信支付基本流程
- 微信amr格式语音转MP3
- 微信开发-微信消息的接收与返回(2)
- 高仿微信图片选择模块
- 纯html实现将网页页面分享到微信朋友圈添加缩略图图片的方法
- Android——微信支付功能模块的嵌入
- 微信公众号API使用总结
- 微信公众平台开发实战Java版之微信获取用户基本信息
- 微信开发-微信公共账号申请与接入(1)
- 微信
- 微信开放平台API开发资料
- 微信公众号开发者模式Java笔记-管理素材
- 微信公众号jssdk使用的惨痛经历
- 微信自定义分享功能