/**
 * (触屏版)跳转游记支付二维码页 (接口返回表单如下)
 *  <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回调地址配置、以及遇到的一些坑相关推荐

  1. 微信公众号开发,微信支付功能开发(网页JSAPI调用)

    1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...

  2. 【javaWeb微服务架构项目——乐优商城day15】——会调用订单系统接口,实现订单结算功能,实现微信支付功能

    0.学习目标 会调用订单系统接口 实现订单结算功能 实现微信支付功能 源码笔记及资料: 链接:https://pan.baidu.com/s/1_opfL63P1pzH3rzLnbFiNw 提取码:v ...

  3. springboot 微信小程序 对接微信支付功能(完整版)

    微信小程序对接微信支付功能 业务流程时序图 JAVA版 1. 项目架构 2. pom.xml配置文件 3. 小程序账号参数配置类 4.JAVA 通用代码 4.1 工具类 4.1.1 IdGen (id ...

  4. 微信支付服务商的子商户在没有绑定appid,正常使用微信支付功能的方法

    最近客户有个需求:客户使用微信完成付款后会自动关注微信支付账号绑定的微信公众号这样的场景客户体验不好,提出就只想能使用微信支付功能不要自动关注公众号. 所以就有了以下解决方案: 一.在原有的公众号下申 ...

  5. 微信小程序中嵌套html_微信小程序:web-view嵌套H5实现微信支付功能解决方案及填坑...

    ab7117c7d4947210c39e126a01d23ede.jpg 最近一个多月加班比较严重,偶尔休息一天也是在补睡眠+陪家人,比较长时间没有来进行总结记录了.今天不加班,开始为这段时间做的东西 ...

  6. 如何使用easywechat开发微信支付功能

    easywechat是神一样的存在.非常好用.希望大家都能转到这上面来. 用easywechat来开发微信支付功能,步骤如下: 一,需要有一个商品下单页面,页面上有你的商品的信息,还要有购买数量,和一 ...

  7. 尚医通项目150-170:预约挂号、微信支付功能

    前台用户系统 预约挂号 1.接口分析 (1)根据预约周期,展示可预约日期数据,按分页展示 (2)选择日期展示当天可预约列表(该接口后台已经实现过) 2.页面展示分析 (1)分页展示可预约日期,根据有号 ...

  8. 小程序微信支付功能开发

    关于小程序内唤起微信支付功能,不同人有不同的思路,有嵌套H5页面的,也有跳转第三方链接网站的,也有放收钱码等图片的. 今天讲一下微信原生的微信支付功能基础版块,支付页面和支付逻辑. 先上个效果图: 页 ...

  9. 微信小程序使用云开发实现微信支付功能 报错Error: 签名错误,史上最全解决办法,不服留言骂我

    报错背景 微信小程序使用云开发实现微信支付功能,但是报错了 报错信息 报错原因 小程序想要使用微信支付,必须满足下面几个条件的 1,必须是非个人小程序(个人小程序用不了支付) 企业小程序需要认证! 2 ...

最新文章

  1. leetcode--字符串转换为整数--python
  2. Trilogy公司的笔试题:根据指定规则用最少的步骤将数转为1
  3. 哥伦比亚大学的材料更新提交窗口!干货!
  4. golang微服务框架对比_Go语言开发的微服务框架,你了解多少?
  5. where is path tag generated
  6. python邮件发送_Python实现邮件发送
  7. 解决datalist中单选按钮可以多选的问题(Asp.Net)
  8. 数据中台公开课丨可以复用的中台架构建设经验与实践
  9. Spark之键值RDD转换(转载)
  10. Axure Mac汉化
  11. php 怎么使用api付款,使用PHP中的REST API进行Paypal付款
  12. 知乎网站胡说八道,误人子弟!
  13. salesforce架构_使用Salesforce扩展用户研究运营基础架构
  14. 【思前享后】区块链应用
  15. B站机房失火导致网站崩溃?网络工程师又又又背锅了……
  16. Java Web --HTML(尚硅谷2022版Javaweb)
  17. 查看Oracle数据库版本号
  18. 计算机专业可以考哪些资格证书,计算机专业的人可以考哪些职业资格证书?
  19. 如何编辑 删除 修改 pdf文件中的文字
  20. python采集链家二手房信息

热门文章

  1. 单词拆分java与填表法_139. 单词拆分
  2. 原生 和html5 性能,原生开发与HTML5开发的对比
  3. Proactor模型
  4. 入门系列:gdb学习——函数调用时参数传递
  5. 2017年2月28日 星期二 --出埃及记 Exodus 23:18
  6. mac os 上启用简单http file server web 文件服务器
  7. 论文翻译怎么在线操作,论文翻译的步骤
  8. 模拟投票小程序C语言代码,微信小程序投票系统创建投票发布demo完整源码下载 一个很简单 - 下载 - 搜珍网...
  9. No enclosing instance of type TextRunnable is accessible. Must qualify the allocation with an enclo
  10. 组播——IGMP Snooping