1. 程式人生 > >(Web、觸屏)微信支付功能呼叫以及QQ回撥地址配置、以及遇到的一些坑

(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