zoukankan      html  css  js  c++  java
  • atitit.微信支付的教程文档 attilax总结

    atitit.微信支付的教程文档 attilax总结

    1. 支付流程概览 1

    2. 设置支付起始目录   host/app/paydir/ 1

    3. 设置oauth验证域名 1

    4. 测试目录 可以使用ip,但必须80端口好像。 1

    5. 发起测试支付,菜单  host/fromother.jsp 2

    6. Start.jsp 2

    7. 获取openidpage接口,并制定回调接口 2

    8. 开始支付页面 3

    9. 生成js调用支付接口 4

    10. 注意事项 5

    10.1. 预支付的签名and提示mch不存在 5

    1. 支付流程概览

    首先,生成一个prepayID

    ,拿这个prepayid  使用js 调用支付的js fun...

    2. 设置支付起始目录   host/app/paydir/

    要有一个通过备案的域名+80端口,不能使用ip形式,也不能其他端口号(好像域名+端口号可以)

    如果测试,可以使用测试目录

    作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

    转载请注明来源: http://blog.csdn.net/attilax

    3. 设置oauth验证域名

    实际上可以设置ip+端口

    4. 测试目录 可以使用ip,但必须80端口好像。

    要手动添加测试白名单。。然后就可以测试了。。

    5. 发起测试支付,菜单  host/fromother.jsp

    6. Start.jsp

    String call="http://www.baidu.com/xx.htm";

    String return_url="http://www.baidu.com/orderProcess?orderno=12346¶2=val2";

    String url="http://host:port/wechat/pay.jsp?orderno="+filex.getUUidName()+"&fee=1&callback_url="+URLEncoder.encode(call, "utf-8")+"&name="+URLEncoder.encode("测试商品""utf-8")+"&return_url="+URLEncoder.encode(return_url, "utf-8");

      

    %> <meta http-equiv="refresh" content="0;URL=<%=url%>" />

    <%=url%>

     

    7. 获取openidpage接口,并制定回调接口

      <%

      session.setAttribute("queryStr",request.getQueryString());

     

      String url="http://host+port/wechat/getopenid.jsp?callbackurl=pay_stp2.jsp" ;//URLEncoder.encode(s, enc);

      session.setAttribute("orderno",request.getParameter("orderno"));

        session.setAttribute("fee",request.getParameter("fee"));

      session.setAttribute("name",request.getParameter("name"));

        session.setAttribute("callback_url",request.getParameter("callback_url"));

      String url2= URLEncoder.encode(url, "utf-8");

      %>

     pay: 

      <meta http-equiv="refresh" content="0;URL=https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx947702f1812d3249&redirect_uri=<%=url2%>&response_type=code&scope=snsapi_base&state=1#wechat_redirect" />

    <%=url%>

     

    注意,这个urlhost+port必须在othau验证配置那里设置到。

     

    8. 开始支付页面

     

        <%@page import="com.attilax.net.urlUtil"%>

    <%

    WechatX wechatC= IocX.getBean(WechatX.class);

    String openid =request.getParameter("openid");

    //urlUtil.urlEncode

    String url="http://domain/wechat/pay_stp3.jsp?openid="+openid+"&"+(session.getAttribute("queryStr").toString());

    //String payurl= URLEncoder.encode(url, "utf-8") ;

    %>

    p2:

     <meta http-equiv="refresh" content="0;URL=<%=url%>" />

     <label for="textarea"></label>

     <textarea name="textarea" id="textarea" cols="45" rows="5"><%=url%><aa></textarea>

     

     

    注意这个支付的发起目录必须在正式域名下配置的那个目录才可

     

    9. 生成js调用支付接口

      <%

    WechatX4Pay px = IocX.getBean(WechatX4Pay.class);

    try{

        px.orderno=request.getParameter("orderno").toString();

     px.openid=request.getParameter("openid");

    px.fee=request.getParameter("fee").toString();

    px.title=request.getParameter("name").toString();

    px.notify_url=request.getParameter("callback_url").toString();

    px.Pay_geneJsapiParam(request);

    }catch(Exception e)

    {

    out.write(com.attilax.html.HtmlX.Htmlencode ( com.attilax.util.god.getTrace(e)));

    return;

    }

    %>

     

     

     

     <script>

      var title=<%=px.title%>

      </script>

      <script>

     

    function onBridgeReady(){

       WeixinJSBridge.invoke(

           'getBrandWCPayRequest', {

               "appId" : "<%=px.appId%>",     //公众号名称,由商户传入     

               "timeStamp":"<%=px.timeStamp%>",         //时间戳,自1970年以来的秒数     

               "nonceStr" : "<%=px.nonceStr%>", //随机串     

               "package" : "<%=px.packageStr%>",     

               "signType" : "MD5",         //微信签名方式:     

               "paySign" : "<%=px.paySign%>" //微信签名 

           },

           function(res){     

               if(res.err_msg == "get_brand_wcpay_request:ok" ) {

      var ret="<%= request.getParameter("return_url")%>";

      if(ret!="null")

       window.location=ret;

    else

    alert("支付成功");

       

       }     // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。 

           }

       ); 

       //invoke end

    }

    // obr end

    //alert( typeof WeixinJSBridge );

    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>

     

     

    10. 注意事项

    10.1. 预支付的签名and提示mch不存在

    提示mch不存在,可能sign有误,不个sign袖管改给挂,要是还是中个,走十sign err

    Mch id 也许不是wechat admin console支持的内个...也许别的的...

    要有个mch id 跟个pay key...这个paykey 要到个mch console 设置...登录mch console要证书and手机验证码,麻烦的..

    这个pay key不是app d pwdkey..另一个的...

    10.2. 'getBrandWCPayRequest'的签名,

    要包括     "signType" : "MD5",   这个参数

     

    Return_url ::::

     if(res.err_msg == "get_brand_wcpay_request:ok" ) {

      var ret="<%= request.getParameter("return_url")%>";

      if(ret!="null")

       window.location=ret;

     

    10.3. 用户取消的处理::

    返回网站主页面

    返回挑选服务框(like  cart),冉设置服务的数量等..

    返回内个服务页面

    专门的一个cancel页面不好使用)

    10.4. 可用性设计:手动支付,再次支付按钮要有

    10.5. 测试方面的支持

    Debug模式,可以使用在调用开头的时候儿...

    Stopstep:: 可以指定stopstep

    Show html code的支持...特别是支付林吧的时候儿.

     

     

     

  • 相关阅读:
    移动端a标签点击图片有阴影处理
    sublime vue 语法高亮插件安装
    mongodb 命令
    MongoDB给数据库创建用户
    windows32位系统 安装MongoDB
    ES6之主要知识点(十)Proxy
    ES6之主要知识点(九)Set和Map
    ES6之主要知识点(八)Symbol
    ES6之主要知识点(七)对象
    Ueditor 1.4.3 插入表格后无边框无颜色,不能正常显示
  • 原文地址:https://www.cnblogs.com/attilax/p/15198901.html
Copyright © 2011-2022 走看看