微信支付之h5网页支付

先简单说下微信公众号支付的流程首先得到code,而后得到openid,而后根据openid获取到预支付ID(prepay_id),获取到prepay_id,天然获得packages ,这个最难得到的参数得到以后,基本上就作好一半了,剩余的参数 appId 公众号id,timeStamp时间戳,nonceStr随机字符串,signType签名方式,paySign。html

获取到这些参数后,新建一个页面,复制微信的代码 :前端

function onBridgeReady(){

         WeixinJSBridge.invoke(

             'getBrandWCPayRequest', {

                 "appId" : "wx2421b1c4370ec43b",     //公众号名称,由商户传入     

                 "timeStamp":" 1395712654",         //时间戳,自1970年以来的秒数     

                 "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //随机串     

                 "package" : "prepay_id=u802345jgfjsdfgsdg888",     

                 "signType" : "MD5",         //微信签名方式:     

                 "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 

             },

             function(res){     

                 if(res.err_msg == "get_brand_wcpay_request:ok" ) {}     // 使用
以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。 

             }

         ); 

      }

      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();

    }

声明:以上代码为微信官方文档中,如使用,请到官方文档中复制api

这样微信就会自动调用支付安全

一、调用微信支付一闪而过微信

微信的测试路径不对,进入公众号平台,检查测试路径,app

若是使用的是测试路径,则必须将本身的公众号加入到测试白名单中微信公众平台

二、微信支付所需参数dom

appid 微信公众平台中的 基本配置中函数

appsecret 微信公众平台中的 基本配置中测试

partner 商户号

key 在商户平台下的帐户设置api安全中。

三、在微信支付页面最好只要一些必要的东西,若是多了,可能会引发冲突。

四、开发前须要修改接口权限下的网页受权基本信息,填写测试的域名

五、微信支付调不起来缘由

带有网页嵌套的调用不起来

有多是jq版本问题,调用低版本试试

六、调用微信支付另外方法

wx.chooseWXPay({

    timestamp: 0, // 支付签名时间戳,注意微信jssdk中的全部使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符

    nonceStr: '', // 支付签名随机串,不长于 32 位

    package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)

    signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'

    paySign: '', // 支付签名

    success: function (res) {

        // 支付成功后的回调函数

    }

});

参考

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN

七、错误解决方案,连接

http://kf.qq.com/faq/140225MveaUz150413VNj6nm.html

八、最近遇到一个问题,就是网页支付一闪而过,苹果的手机能够支付,安卓的手机不能够支付,通过调试,发现安卓手机发起的支付都获取到了两个Ip地址,这样取出其中一个Ip地址便可解决问题

2016-01-22

微信支付用到的方法

/**
     * 元转换成分
     * @param money
     * @return
     */
    public static String getMoney(String amount) {
        if(amount==null){
            return "";
        }
        // 金额转化为分为单位
        String currency =  amount.replaceAll("\\$|\\¥|\\,", "");  //处理包含, ¥ 或者$的金额  
        int index = currency.indexOf(".");  
        int length = currency.length();  
        Long amLong = 0l;  
        if(index == -1){  
            amLong = Long.valueOf(currency+"00");  
        }else if(length - index >= 3){  
            amLong = Long.valueOf((currency.substring(0, index+3)).replace(".", ""));  
        }else if(length - index == 2){  
            amLong = Long.valueOf((currency.substring(0, index+2)).replace(".", "")+0);  
        }else{  
            amLong = Long.valueOf((currency.substring(0, index+1)).replace(".", "")+"00");  
        }  
        return amLong.toString(); 
    }
    public String getIpAddr(HttpServletRequest request) { 
        String ip = request.getHeader("x-forwarded-for"); 
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
            ip = request.getHeader("Proxy-Client-IP"); 
        } 
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
            ip = request.getHeader("WL-Proxy-Client-IP"); 
        } 
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
            ip = request.getRemoteAddr(); 
        } 
        return ip; 
    }
/**
     * 获取随机字符串
     * @return
     */
    public static String getNonceStr() {
        // 随机数
        String currTime = TenpayUtil.getCurrTime();
        // 8位日期
        String strTime = currTime.substring(8, currTime.length());
        // 四位随机数
        String strRandom = TenpayUtil.buildRandom(4) + "";
        // 10位序列号,能够自行调整。
        return strTime + strRandom;
    }
//获取ip地址
public String getIpAddr(HttpServletRequest request) { 
        String ip = request.getHeader("x-forwarded-for"); 
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
            ip = request.getHeader("Proxy-Client-IP"); 
        } 
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
            ip = request.getHeader("WL-Proxy-Client-IP"); 
        } 
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
            ip = request.getRemoteAddr(); 
        } 
        return ip; 
    }
相关文章
相关标签/搜索