(Web、觸屏)微信支付功能呼叫以及QQ回撥地址配置、以及遇到的一些坑
/** * (觸屏版)跳轉游記支付二維碼頁 (介面返回表單如下) * <form id="lolapaysubmit" name="lolapaysubmit" action="https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx13092343961008fc45bd70563985297260&package=1871099982&redirect_url=https%3A%2F%2Ft.2bulu.com%3A7203%2Flolapay%2Fbusiness_success.htm%3ForderNumber%3DRO201806130922281712461"* method="post"> * <input type="submit" value="確認"> * </form> * <script> * document.forms['lolapaysubmit'].submit(); * </script> * */ function travelPayPage(articleId,money){ $.ajax({ type:'post', url:basePath+'/community/pay_travel.htm', data:{articleId:articleId,payType:2,money:money}, success:function(data){ if(data.code==13045){ Msg.fade({text:"訂單已支付"}); }else if(data.code==0){//請求成功 //會返回一個H5原生表單,通過構造div來喚起微信支付 就是下面返回的js程式碼 var $mainElement = document.getElementById("payInsuranceDiv"); if($mainElement && $mainElement.length!=0){ $mainElement.parentNode.removeChild($mainElement); } var turnForm = document.createElement("div"); turnForm.id = "payInsuranceDiv"; turnForm.style.display = "none"; document.body.appendChild(turnForm); $("#payInsuranceDiv").html(data.result); }else if(data.code==202){//無登入 window.location.href = basePath+"/login.htm"; }else{//系統錯誤 Msg.fade({text:"系統錯誤"}); } } }); }
/** * (PC端)跳轉游記支付二維碼頁 */ var requestInterval; function travelPayPage(articleId,money,showFlag){ $.ajax({ type:'post', url:basePath+'/community/pay_travel.htm', data:{articleId:articleId,payType:2,money:money}, success:function(data){ if(data.code==13045){ Msg.fade({text:"訂單已支付"}); }else if(data.code==0){//請求成功 $("#orderId").val(data.result.out_trade_no);//訂單號 $(".qr-code-img").attr("src","../qrCode?"+data.result.code_url);//二維碼繫結連結 $("#payMoney").text(money); if(showFlag==1){ $(".reward_window1").hide(); $(".reward_window3").show(); }else if(showFlag ==2){ $(".reward_window2").hide(); $(".reward_window3").show(); } //定時掃描訂單支付情況 requestInterval = window.setInterval("getPayResult('"+data.result.out_trade_no+"')",3000);//3秒鐘迴圈檢查訂單支付情況 }else if(data.code==202){//無登入 window.location.href = basePath+"/login.htm"; }else{//系統錯誤 Msg.fade({text:"系統錯誤"}); } } }); }
/**** * 支付結果請求 * @param orderId 訂單id * @returns */ function getPayResult(orderId){ $.ajax({ type:'get', url:basePath+'/community/get_travel_detail.htm', data:{orderId:orderId}, success:function(data){ if(data.order.status== 2){ window.clearInterval(requestInterval); $("#payUserHeadPic").attr("src",data.order.user.cover.fileUrl); $(".payUserName").text(data.order.user.nickname); $(".appreMoney").text(data.order.money/100); $(".reward_window4").show(); // location.href=basePath+'/lolapay/business_ac_success.htm?id='+orderId; } } }); }
2.微信攔截,獲取微信登入的openid
此處測試經常遇到的問題總結如下:
1.需要配置域名測試,必須是http://www.baidu.com這樣的類似的域名,必須是www開頭
2.喚起微信支付頁面二級連結必須要在微信官網上有註冊,是二級目錄的 http://www.2bulu.com/
http://www.2bulu.com/lolapay/webchat_travel_pay.htm //這樣子就可以了、二級目錄:lolapay,換成別的就不可以 就會出現圖三錯誤:url未註冊
3.本地測試的時候必須是正規的域名,後面不能加字尾如 http://www.xxx.com/tbl/....這個tbl不能要的
必須是這個樣子:http://www.2bulu.com/community/gotohuatinfo.htm?id=40467&type=1
/*//微信呼叫成功會出現如下的連結如下: https://open.weixin.qq.com/connect/oauth2/authorize? appid=wxf4089e0e20e0c44b&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Ftbl%2Fcommunity%2Fcommon%2F authorization_open_id.htm%3Fa%3Db&response_type=code&scope=snsapi_base&state=authorize_flag &uin=NDE1MzkwMjQw&key=2d22aaf0f212624a6154ffe6be5f7790d1b68cf1bade9a5203542e07012e86f01da8d387a1669b38da63b1495bc32148& pass_ticket=dfUpz5Or1CLGRwxk2rJYbR5+3diWDT4Ik8wcvTYorY5/K5hYIcbKAsGZOx4uVFlLNLcm/EqrFlRrqZ0a00Q7nA== */ /*這個是介面返回的js用來喚起 *<script>function onBridgeReady(){ WeixinJSBridge.invoke('getBrandWCPayRequest',{"timeStamp":"1528875741","package":"prepay_id=wx1315431306070889f094a7181293102091", "paySign":"254DA78D5BD8E76571F2B12598EE0846","appId":"wxf4089e0e20e0c44b","signType":"MD5","nonceStr":"s8oehike250smturtr3tjqi2ir2qe1t0"}, function(res){if(res.err_msg=="get_brand_wcpay_request:ok"){ window.location.href='https://t.2bulu.com:7203/lolapay/business_success.htm?orderNumber=RO201806131542113072057'}});} 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(); } </script>*/4.本地測試話,需要改下host檔案:對映為域名
127.0.0.1 www.2bulu.com
package com.lolaage.tbl.util.intercepter; import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.util.StringUtils; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.lolaage.tbl.util.Config; import com.lolaage.tbl.util.LoginUtil; import com.lolaage.tbl.util.TerminalUtil; import com.lolaage.util.LolaPayUtil; public class WechatAuthorizationIntercepter extends HandlerInterceptorAdapter { private static Logger logger = Logger.getLogger(WechatAuthorizationIntercepter.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String path = request.getRequestURI(); if (TerminalUtil.isWeChat(request) && path.indexOf("common/authorization_open_id.htm") > -1 ) { String openId = request.getSession().getAttribute("authorization_open_id") != null?request.getSession().getAttribute("authorization_open_id").toString():null; if(openId==null || "".equals(openId)){ String state = request.getParameter("state"); if("authorize_flag".equals(state)){//判斷是否為微信獲取使用者資訊請求呼叫 String code = request.getParameter("code");//使用者同意授權,獲取code openId = LolaPayUtil.getOpenId(code).getString("openid"); request.getSession().setAttribute("authorization_open_id", openId); String strBackUrl = request.getSession().getAttribute(LoginUtil.LOGIN_SUCCESS_BACK_PATH_NAME)+""; // 處理完成後仍未登入,跳轉到登入頁面 response.sendRedirect(strBackUrl.replace("&", "&")); return false; } }else{ String strBackUrl = request.getSession().getAttribute(LoginUtil.LOGIN_SUCCESS_BACK_PATH_NAME)+""; // 處理完成後仍未登入,跳轉到登入頁面 response.sendRedirect(strBackUrl); return false; } request.getSession().setAttribute(LoginUtil.LOGIN_SUCCESS_BACK_PATH_NAME, request.getHeader("referer")); String strBackUrl = Config.previewAddress //專案名稱 + request.getServletPath().substring(1) //請求頁面或其他地址 + "?" + (request.getQueryString()!=null?request.getQueryString():"a=b"); //引數 request.setAttribute("requestUrl", LolaPayUtil.toAuthorize(strBackUrl,"snsapi_base")); RequestDispatcher rd = request.getRequestDispatcher("/common/wechat_authorization.htm"); rd.forward(request,response); return false; } return super.preHandle(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { super.postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { super.afterCompletion(request, response, handler, ex); } }
圖三
https://connect.qq.com/manage.html#/appinfo/web/101344923
配置回撥地址、地址必須是域名http開頭,加上正確的地址
手機端用微信支付經常會遇到一個問題就是回撥地址,提前回調了,通過檢視微信支付的API上面說
所以必須要重定向到一箇中間頁面來喚起微信,到時候微信支付完成或取消支付都會,再回到這個中間頁面,中間頁面可以讓使用者自己做處理或者用輪詢去查資料庫訂單狀態,上圖請確認微信需要放到一箇中間頁面 ,下圖就是我自己隨便做的一個跳轉頁面
相關推薦
(Web、觸屏)微信支付功能呼叫以及QQ回撥地址配置、以及遇到的一些坑
/** * (觸屏版)跳轉游記支付二維碼頁 (介面返回表單如下) * <form id="lolapaysubmit" name="lolapaysubmit" action="https://wx.tenpay.com/cgi-bin/mmpayweb-bin/c
C#微信支付(六)—— 通知回撥
這是重頭戲了,修改訂單狀態一般就是兩個地方,一個是前臺輪訓後發現微信訂單完成後修改狀態,另一個就是通知回撥那了。 通知回撥類,修改了下微信Demo程式碼,相容了支付和退款兩種情況,覺得放一起不好的,想分成兩個介面就拆開就好了 /// <summ
微信小程式:web-view巢狀H5實現微信支付功能解決方案及填坑
最近一個多月加班比較嚴重,偶爾休息一天也是在補睡眠+陪家人,比較長時間沒有來進行總結記錄了。今天不加班,開始為這段時間做的東西進行下經驗總結。 這段時間因為公司需要,接觸了一些.Net前後臺開發,慢慢了解了一些WCF、H5站點、WebService、Soap、Linq等,也
H5調起微信支付功能
需要 con 返回 alert list 訂單 團隊 eve window 第一步:需要後端返回需要的以下參數: 該操作是你提交完訂單信息後在接口所返回的json, 其次將其存儲起來,我用的localStorage var payParams = {
微信支付功能
and ini edm this substring pac pfx inpu code js wx.request({ url: url + ‘/team!jfchongzhi.action?openid=‘ + openid + ‘&weibi
【轉】微信小程序實現微信支付功能(可用)
arr 必須 enc red use sam func 結束 單表 原博: https://blog.csdn.net/fredrik/article/details/79697963 微信小程序實現微信支付功能 直接把裏面的參數替換成你的就
spring boot項目之微信支付功能實現詳細介紹
tab 流程 invalid body 正方形 無法 數據 fmt -s 對接微信支付功能主要有以下幾個步驟, 而其第一個關鍵點就是獲取OpenID,在這裏介紹兩種獲取方式: 一、微信授權 微信網頁授權 如果用戶在微信客戶端中訪問第三方網頁,公
微信小程序 使用微信支付功能實現在線支付訂單
navi order lose ray 如果 image 全部 extern base 以前做過PC頁面微信支付,但是這次在小程序 直接調用微信支付功能還是方便很多 先放個微信官方API鏈接:https://pay.weixin.qq.com/wiki/doc/api/wx
PHP實現 APP端微信支付功能
1.我封裝好的一個支付類檔案,多餘的東西都去除掉了,並且把配置引數放到了這個支付類中,只需要修改Weixinpayandroid方法內的幾個引數就可以直接複製使用: class Wxpayandroid { //引數配置 public $config = array( 'appid' =&
微信支付功能實現
< view class= "container"> < input type= "text" bindinput= "getOrderCode" style= "border:1px solid #ccc;"
微信公眾號服務號如何開通微信支付功能
開通微信商戶支付平臺 當我們的公眾號認證完成之後,就可以正常使用了,擔憂有很多地方我們就需要用到微信支付了,例如微信商城,拼團的線上支付等等場景。而且現在微信的使用場景非常廣泛,基本上每個人都會攜帶手機且使用微信,所以商戶開通微信支付可以更好的為顧客服務:(只有服務號可以申請微信支付,每個訂閱號有一次機會升
微信小程式、app整合微信支付
一、微信小程式支付 申請小程式開發者賬號,進行微信認證,獲取appid,開通微信支付,即繫結申請的微信支付商戶號。 1.小程式支付流程: 2.商戶系統和微信支付系統主要互動: 1、小程式內呼叫登入介面,獲取到使用者的openid。 2
java服務端,微信支付功能的實現
接入微信的支付功能在java服務端,現在記錄下來這個過程,方便以後用到。程式碼都是參考網路,功能可以實現 實際參考https://github.com/wxpay/WXPay-SDK-Java ①,寫一個介面,作為引數配置的介面,當然也可以不用介
Java 版微信支付功能分享
微信支付越來越成為電商們熱衷的支付方式,微信官方也給分享了微信支付的原始碼,但缺少詳細的指引,對於新手來說會浪費大量的時間。 本場 Chat 主要適用於有微信支付需求但未進行過微信支付開發的開發者們,以案例的形式詳細的講述微信支付的整個流程,參與活動我會給大夥分享可以跑通 Java 原始碼,只需修
微信小程式實現微信支付功能
這裡我直接上程式碼,附有註釋,直接把我的程式碼貼上一下就可以用了,也是自己走了好多的彎路。。,寫在部落格裡做個記錄直接把裡面的引數替換成你的就可以了,前提是你要開通的有微信支付功能,需要商戶號,appid,appsecret,openid,openid的獲取比較簡單,我再寫一
整合ping++支付寶微信支付功能遇到的坑
1、匯入官方專案時,不能像常規那樣匯入專案時,刪掉一些資料夾,更改檔案中版本,什麼都不改,直接開啟即 可。錯誤時,android studio會報錯:android studio error: style attribute ‘@android:attr/windowEnterAni
java後臺對微信支付功能的實現
第一次寫微信小程式後臺介面,卻發現微信小程式有太多太多坑了。所以這裡進行一個記錄,防止忘記。(現在補更一下,一定要和前端開發人員溝通好返回值啊!!最後一步給前端paySign值,結果前端老是報錯requestPayment:fail parameter error: para
Android微信支付功能整合【全攻略】
遵循:BY-SA 作者:譚東 時間:2016年10月28日 環境:Windows 7 Android版微信支付官方文件和Demo問題很多,官方也沒有及時更新和細化開發整合文件。 這裡分享我整合Android客戶端微信支付的思路和部分程式碼。希望對大家有幫
PHP實現微信支付功能開發+例項程式碼
namespace Wechat\Controller; use Think\Controller; /** * 父類控制器,需要繼承 * @file ParentController.class.php * @author Gary <[email protected]> *
快速實現微信支付功能
首先去支付寶開發平臺申請支付接入功能,並且填寫正確的包名和APP簽名 1,包名直接在Androidmainfest中檢視 package="com.company.demo"; 2,APP簽名可以用騰訊開發平臺的簽名生成工具Gen_Signature_Android.a