微信公众号支付接口网页开发示例

微信公众号支付开发步骤如下:

(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();
        }
        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值。


转载于:https://my.oschina.net/u/778683/blog/595456

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值