微信H5頁面JSAPI支付

官方文檔地址JSAPI
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

官方文檔地址統(tǒng)一下單
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

后臺獲取prepay_id參數(shù)地址
https://api.mch.weixin.qq.com/pay/unifiedorder

請求參數(shù)

        String nonce_str= UUID.randomUUID().toString().replace("-", "");//隨機數(shù)
        SortedMap<String, Object> packageParams = new TreeMap<String, Object>();
        packageParams.put("appid", APPID);
        packageParams.put("attach", attach);//附加數(shù)據(jù)
        packageParams.put("body", describe);//商品描述
        packageParams.put("mch_id", MCHID);//商戶號
        packageParams.put("nonce_str", nonce_str);//隨機數(shù)
        packageParams.put("notify_url", NOTIFY_URL);//異步通知地址
        packageParams.put("out_trade_no", out_trade_no);//商戶訂單號
        packageParams.put("spbill_create_ip", spbill_create_ip);//訂單生成的機器 IP
        packageParams.put("total_fee", money);//總金額必須int               
        packageParams.put("trade_type", "JSAPI"); //類型為JSAPI
        packageParams.put("openid", openid); //JSAPI 時必須傳遞用戶openid
        String sign = WxPayUtils.createSign(packageParams,KEY);//商戶KEY萄窜, MD5簽名(以下簽名方式均按照官方要求矢门,并且要與JS端簽名類型一致)

xml拼接參數(shù)與packageParams一致

        String xml="<xml>"+
                "<appid>"+APPID+"</appid>"+
                "<attach>"+attach+"</attach>"+
                "<body><![CDATA["+describe+"]]></body>"+
                "<mch_id>"+MCHID+"</mch_id>"+
                "<nonce_str>"+nonce_str+"</nonce_str>"+
                "<sign>"+sign+"</sign>"+
                "<notify_url>"+NOTIFY_URL+"</notify_url>"+
                "<out_trade_no>"+out_trade_no+"</out_trade_no>"+
                "<spbill_create_ip>"+spbill_create_ip+"</spbill_create_ip>"+
                "<total_fee>"+money+"</total_fee>"+
                "<trade_type>JSAPI</trade_type>"+
                "<openid>"+openid+"</openid>"+
                "</xml>";

返回參數(shù)為xml格式數(shù)據(jù)

將返回的相應(yīng)字段get后回傳給JS前端

        String appid = (String) map.get("appid");
        String prepay_id = (String) map.get("prepay_id");
        String nonce_str = (String) map.get("nonce_str");
        SortedMap<String, Object> mapParam = new TreeMap();
        mapParam.put("appId", appid);
        mapParam.put("timeStamp", String.valueOf(cUtil.getTime()));
        mapParam.put("nonceStr", nonce_str.trim());
        mapParam.put("package", "prepay_id="+prepay_id.trim());
        mapParam.put("signType", "MD5");
        //二次簽名攘须,需要再次將參數(shù)(不包括paySign)MD5簽名
        mapParam.put("paySign", WxPayUtils.createSign(mapParam,WxJSPay.KEY));

JS端示例(官方)

function onBridgeReady(){
   WeixinJSBridge.invoke(
      'getBrandWCPayRequest', {
         "appId":"wx2421b1c4370ec43b",     //公眾號名稱,由商戶傳入     
         "timeStamp":"1395712654",         //時間戳圣贸,自1970年以來的秒數(shù)     
         "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挚歧,但并不保證它絕對可靠。
      } 
   }); 
}

支付簽名校驗不通過
1:檢查返回給前端的nonceStr字段 是否與下單接口返回的一致
2:檢查paySign是否二次簽名吁峻,回傳給前端是否正確
3:檢查appid是否與前端一致
4:檢查signType是否一致
5:檢查nonceStr生成規(guī)則滑负,注意符號(例如:- )

下單失敗,超時
1:檢查timeStamp是否10位int
2:檢查prepay_id是否在有效期內(nèi)

該商戶沒有預(yù)訂單下單權(quán)限
檢查商戶公眾號后臺是否配置相關(guān)JSAPI

HttpUrl鏈接不在合法范圍內(nèi)
配置可外網(wǎng)訪問

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锡搜,隨后出現(xiàn)的幾起案子橙困,更是在濱河造成了極大的恐慌,老刑警劉巖耕餐,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凡傅,死亡現(xiàn)場離奇詭異,居然都是意外死亡肠缔,警方通過查閱死者的電腦和手機夏跷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來明未,“玉大人槽华,你說我怎么就攤上這事√送祝” “怎么了猫态?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我亲雪,道長勇凭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任义辕,我火速辦了婚禮虾标,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灌砖。我一直安慰自己璧函,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布基显。 她就那樣靜靜地躺著蘸吓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撩幽。 梳的紋絲不亂的頭發(fā)上美澳,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機與錄音摸航,去河邊找鬼。 笑死舅桩,一個胖子當(dāng)著我的面吹牛酱虎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播擂涛,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼读串,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撒妈?” 一聲冷哼從身側(cè)響起恢暖,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狰右,沒想到半個月后杰捂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡棋蚌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年嫁佳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谷暮。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒿往,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出湿弦,到底是詐尸還是另有隱情瓤漏,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蔬充,受9級特大地震影響蝶俱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娃惯,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一跷乐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趾浅,春花似錦愕提、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至证膨,卻和暖如春如输,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背央勒。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工不见, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崔步。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓稳吮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親井濒。 傳聞我的和親對象是個殘疾皇子灶似,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 先引入JS 文件 this.wxShare() 在created里調(diào)用 首先登陸微信公眾號 JSSDK使用步驟 步...
    寄魚予海與你閱讀 6,705評論 1 3
  • 微信公眾號開發(fā) ?前面做過 HG 項目的微信端,里面用到微信掃碼瑞你、支付酪惭、圖片選取、拍照者甲、分享的功能春感。用到 weix...
    Ghnhxg閱讀 532評論 1 1
  • 進(jìn)階架構(gòu)精品專題 Mysql優(yōu)化專題(★★★★) 網(wǎng)絡(luò)協(xié)議專題(★★★★) 其余18大專題甥厦,請在主頁菜單欄查看 后...
    Java進(jìn)階架構(gòu)師閱讀 6,072評論 0 7
  • 今天凌晨,昆明上空雷公在咆哮寇钉,好多年沒有過的驚雷不斷鳴響刀疙。驚醒后心慌不已,旁邊房間睡著剛剛分床不久的小喵扫倡,不知道現(xiàn)...
    老馬拾荒閱讀 259評論 1 0
  • 徐飛 9分 8分知識谦秧,1分進(jìn)取心 關(guān)于微商竟纳,有些人們本能的排斥可能是因為不習(xí)慣,不過如果真的能創(chuàng)造價值疚鲤,...
    CaptainMerry閱讀 72評論 0 0