1. 程式人生 > >微信公眾號開發---微信支付之H5頁面WAP端接入

微信公眾號開發---微信支付之H5頁面WAP端接入

更新:2015年12月3日微信提供 Wap 支付, 開發者文件:【微信支付】開發者文件

1.前言

公司是通過支付寶和微信支付那塊內容獲取收入,app端已經接入成功,現在要做WAP端。需要頁面和後臺介面一起來實現。

2.介面接入

因為微信支付版本更新了,網上下的demo是V2.5版的,用不了了。所以去網上找資料,看到最新版的V3。

這裡我找到了一個統一下單介面,文件入口.

因此,開始接入我所需要的wap端引數。

這裡需要的引數關鍵有Appid,mch_id,key。

appid和mch_id是在公眾平臺那邊獲取。key值是在商戶平臺(pay.weixin.qq.com)-->賬戶設定-->API安全-->金鑰設定 這邊自己設定的。

坑一:若key值設定不對,會出現錯誤“支付許可權查詢失敗” 。這時候請檢查 appid,mch_id所在的公眾號 對應 商戶號的key值是否正確。

坑二:我在開發中還遇到“您沒有WAP支付許可權” 這麼個錯誤。百了很久都沒人遇到這個坑。於是,傳送郵件給微信支付([email protected][email protected])這兩個郵件我都發了,結果還是漫無迴應啊。於是,打通了商戶平臺的客服(0755-86018333),客服是MM,估計不懂技術問題,叫我去提問平臺提交問題(http://kf.qq.com//bills/150821samab01c976f2a.html),說是技術人員看到會回覆的,我問是不是 馬上回復,MM不說,就說會回覆的,唉,畢竟人家客服不懂,就沒繼續問下去了。開啟客服給的網址,填寫的時候,發現沒有WAP端,也沒有統一下單這說法,那我只好填寫了  網頁(JSAPI)支付 ,下面在詳細說明,提交後,出現了個提示,說是七天內給個迴應。我去,那還不是白忙活,要7天 業務緊急啊。。

3.程式碼編寫

(1).獲取統一下單引數

  1. public String CreateWapUrl(String outTradeNo, String ip) throws SDKRuntimeException {  
  2.     HashMap<String, Object> param = new HashMap<String, Object>();  
  3.     param.put("appid", WxPayConfig.APPID);  
  4.     param.put("mch_id", WxPayConfig.MCHID);  
  5.     param.put("nonce_str"
    , CommonUtil.CreateNoncestr());  
  6.     param.put("body""產品測試");  
  7.     param.put("out_trade_no", outTradeNo);  
  8.     param.put("total_fee"1);  
  9.     param.put("spbill_create_ip", ip);  
  10.     param.put("notify_url", WxPayConfig.NOTIFYURL);  
  11.     param.put("trade_type""WAP");  
  12.     param.put("sign", getSign(param));  
  13.     return CommonUtil.MapToXml(param);  
  14. }  

(2).獲取簽名值

  1. public String getSign(HashMap<String, Object> param) throws SDKRuntimeException {  
  2.     String sign="";  
  3.     String content = CommonUtil.FormatParamMap(param);  
  4.     sign =  Sign(content, WxPayConfig.KEY);  
  5.     return sign;  
  6. }  
  7. publicstatic String Sign(String content, String key) throws SDKRuntimeException {  
  8.     String signStr = "";  
  9.     if ("" == key) {  
  10.         thrownew SDKRuntimeException("財付通簽名key不能為空!");  
  11.     }  
  12.     if ("" == content) {  
  13.         thrownew SDKRuntimeException("財付通簽名內容不能為空");  
  14.     }  
  15.     signStr = content + "&key=" + key;  
  16.     return MD5Util.MD5(signStr).toUpperCase();  
  17. }  

(3).工具類方法

  1. publicstaticboolean IsNumeric(String str) {  
  2.     if (str.matches("\\d *")) {  
  3.         returntrue;  
  4.     } else {  
  5.         returnfalse;  
  6.     }  
  7. }  
  8. //map轉成xml
  9. publicstatic String MapToXml(HashMap<String, Object> arr) {  
  10.     String xml = "<xml>";  
  11.     Iterator<Entry<String, Object>> iter = arr.entrySet().iterator();  
  12.     while (iter.hasNext()) {  
  13.         Entry<String, Object> entry = iter.next();  
  14.         String key = entry.getKey();  
  15.         String val = entry.getValue()+"";  
  16.         if (IsNumeric(val)) {  
  17.             xml += "<" + key + ">" + val + "</" + key + ">";  
  18.         } else
  19.             xml += "<" + key + "><![CDATA[" + val + "]]></" + key + ">";  
  20.     }  
  21.     xml += "</xml>";  
  22.     return xml;  
  23. }  
  24. //xml轉成map
  25. @SuppressWarnings("unchecked")  
  26. publicstatic Map<String, String> parseXml(String xml) throws Exception {  
  27.      Map<String, String> map = new HashMap<String, String>();  
  28.      Document document = DocumentHelper.parseText(xml);  
  29.      Element root = document.getRootElement();  
  30.      List<Element> elementList = root.elements();  
  31.      for (Element e : elementList) {  
  32.          map.put(e.getName(), e.getText());  
  33.      }  
  34.      return map;  
  35. }  
  36. publicstatic String FormatParamMap(HashMap<String, Object> parameters) throws SDKRuntimeException {  
  37.     String buff = "";  
  38.     try {  
  39.         List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(  
  40.                 parameters.entrySet());  
  41.         Collections.sort(infoIds,  
  42.                 new Comparator<Map.Entry<String, Object>>() {  
  43.                     publicint compare(Map.Entry<String, Object> o1,  
  44.                             Map.Entry<String, Object> o2) {  
  45.                         return (o1.getKey()).toString().compareTo(  
  46.                                 o2.getKey());  
  47.                     }  
  48.                 });  
  49.         for (int i = 0; i < infoIds.size(); i++) {  
  50.             Map.Entry<String, Object> item = infoIds.get(i);  
  51.             if (item.getKey() != "") {  
  52.                 buff += item.getKey() + "="
  53.                         + URLEncoder.encode(item.getValue()+"""utf-8") + "&";  
  54.             }  
  55.         }  
  56.         if (buff.isEmpty() == false) {  
  57.             buff = buff.substring(0, buff.length() - 1);  
  58.         }  
  59. 相關推薦

    公眾開發---支付H5頁面WAP接入

    更新:2015年12月3日微信提供 Wap 支付, 開發者文件:【微信支付】開發者文件 1.前言 公司是通過支付寶和微信支付那塊內容獲取收入,app端已經接入成功,現在要做WAP端。需要頁面和後臺介面一起來實現。 2.介面接入 因為微信支付版本更新了,網上

    公眾開發--------支付

    前言公司最近接了個專案,該專案需要用到微信支付模組。本想簡單點處理直接前端發起支付,後端回撥接收。但前端不知道出了什麼問題,一直無法成功調起微信支付。無奈只好轉後臺來做。開發流程1、先在微信支付 商家裡配置授權目錄,如果你的授權目錄是http://www.xxx.com/we

    關於公眾開發-支付-無法支付的問題

    前提:由於涉及公司業務,部分核心程式碼無法展示,這裡僅僅是聊一下如何解決微信公眾號支付無法支付的解決方案。問題:微信公眾號平臺支付失敗。頁面:大致頁面就是下面這張圖片(引自《公眾號支付開發者文件》中的"公眾號支付"-"場景介紹")所展示的那樣,可以選擇充值金額,可以點選立即充

    公眾開發 —— 網頁授權小記

    微信授權 簡要流程 進入(首頁)頁面 -> 請求資料 -> 401,需要使用者資訊 -> 前端發起 微信授權 -> 使用者確定授權 -> 微信重定向到回撥地址 -> 獲取code,通過code換取網頁授權access_token,生成token -> 跳轉至剛剛的

    公眾開發--自定義選單跳轉頁面並獲取使用者資訊

    請先讀完本文再進行配置開發 請先前往微信平臺開發者文件閱讀“網頁授權獲取使用者基本資訊”的介面說明 在微信公眾賬號開發中,往往有定義一個選單,然後使用者點選該選單就進入使用者個人中心的功能,通常應用於各個公眾賬號中的會員服務。 如何在微信自定義選單中將使用

    公眾開發--JS-SDK分享到朋友圈和分享給朋友

    之前寫過一篇使用微信JS-SDK來實現掃一掃功能的部落格 在該部落格裡介紹了微信JS-SDK的基本用法,其中包括以下幾個步驟 還詳細介紹了通過config介面注入許可權驗證配置以及簽名演算法實現的Java版本 前兩天在做微信分享的時候發現按照以前的

    公眾開發--JS-SDK掃一掃功能

    首先請閱讀微信JS-SDK說明文件,瞭解微信JS的相關說明。 根據官方的使用步驟,關鍵的有以下幾步 繫結域名(很關鍵) 引入JS檔案(很簡單) 通過config介面注入許可權驗證配置(很重要) 通過ready介面處理成功驗證(還沒用到) 通過error介面

    公眾開發---介面素材管理

    素材管理介面:/*臨時素材幾點注意:1.對於臨時素材,每個素材(media_id)會在開發者上傳或粉絲髮送到微信伺服器3天后自動刪除(所以使用者傳送給開發者的素材,若開發者需要,應儘快下載到本地),以節省伺服器資源(對於使用者上傳的臨時素材,我們是不是得有事件來記錄到表中?

    公眾開發-----模板訊息介面-----傳送模板訊息

    傳送模板訊息 介面呼叫請求說明 http請求方式: POST https://api.weixin.qq.com/cgi-bin/message/template/send?access_toke

    公眾開發---企業付款給個人

       以下有關微信支付中企業付款的介紹及編碼參考自微信支付開發文件,網址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1,如圖所示      企業付款,提供企業向用戶付款的功能

    java的公眾開發三(支付

    步驟一:我們需要將微信支付所需要的引數組裝好,然後傳送請求。 所需要的引數在微信支付開發文件中就可以找到我們所必須的11個引數。 步驟二:然後在回撥函式中處理我們支付後的業務邏輯。 /** * * 獲得威微信支付的相關引數

    Django公眾開發(二)公眾支付

    前言   微信公眾號開發又一重要項就是微信支付,如何在微信公眾號中或者微信自帶的瀏覽器中實現微信支付呢?這就是本文的目的。   對於微信支付有幾種分類,一種是app支付(顧名思義給予一些軟體app使用的)、微信內H5支付(什麼意思呢,就是微信內建的瀏

    公眾開發中遇到的問題——支付回撥,分享,獲取openId(三)

    微信的統一下單介面(https://api.mch.weixin.qq.com/pay/unifiedorder)中,下單時,有這樣一個引數:notify_url,該引數是為接收微信支付非同步通知回撥的地址,通知url必須為直接可訪問的url,不能攜帶引數。之前我做回撥的時

    公眾開發支付開發

    微信公眾號開發對接,開發文件也有蠻多坑,所以一路的血淚教訓,這次先針對微信支付整理一下支付的踩坑全過程,開發時間緊現在整理出來,既是對此段時間的學習總結,也希望對遇到同樣問題的童鞋可以有參考價值。 1. 微信掃碼支付 認證微信服務號,申請開通微信支付功能,獲取到微信支付

    公眾開發使用測試不能測試支付介面的解決方案

    概述 大家很清楚,在測試環境中公眾號的app id是絕對不能和生產環境的app id相同!!!如果這個問題都不清楚的就應該面壁去。。。 通常在測試環境上使用的的app id有兩種,分別如下。 (1)公眾號內提供的測試號 (2)另外一個公眾號 對

    公眾開發中遇到的問題——支付(二)

    第一次開發微信公眾號,也是第一次接觸微信公眾號的支付,我使用的是jssdk,用h5頁面呼叫的支付,後臺使用的是java。首先宣告,我不是一個憤世嫉俗的人,也不喜歡吐槽,我認為別人提供介面就已經很不錯了,幹嘛要吐槽呢?但是,這一次,我不得不說,微信公眾號支付的文件真是渣!!!

    公眾開發筆記1(nodejs開發的)

    .post err log 加密 課堂 是我 targe 分享 gty 本篇記錄了微信公眾號開發的一些筆記 一、微信服務器與我們服務器的交流 微信開發者擁有自己的服務器,在我們服務器上可以與微信服務器進行交流。既然可以交流,那就必定需要前提條件(微信認證),也就是說,只有自

    公眾開發

    weixin 後來 方式 發送請求 菜單 ml2 發現 格式 ejs 一、微信服務器與我們服務器的交流 微信開發者擁有自己的服務器,在我們服務器上可以與微信服務器進行交流。既然可以交流,那就必定需要前提條件(微信認證),也就是說,只有自己的服務器與微信服務器進行認證通過後,

    公眾開發教程 小程序

    微信開發 微信小程序PHP微信公眾平臺開發高級篇http://www.imooc.com/u/197650/courses?sort=publish微信小程序教程 。鏈接:http://pan.baidu.com/s/1slmAwDf 密碼:ciry微信公眾號開發教程 微信小程序

    公眾開發--獲取用戶息中文亂碼的解決方案

    其中 utf-8 == font zzu 解決 col class api 在微信開發中我們會經常需要獲取用戶的信息。 微信給我們提供了獲取用戶信息的api, 地址為 https://api.weixin.qq.com/cgi-bin/user/info?access_t