微信支付之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; 
    }
相關文章
相關標籤/搜索