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的支持...特别是支付林吧的时候儿.

     

     

     

  • 相关阅读:
    14_java之变量|参数|返回值|修饰符
    NYOJ 202 红黑树 (二叉树)
    NYOJ 138 找球号(二) (哈希)
    NYOJ 136 等式 (哈希)
    NYOJ 133 子序列 (离散化)
    NYOJ 129 树的判定 (并查集)
    NYOJ 117 求逆序数 (树状数组)
    NYOJ 93 汉诺塔 (数学)
    HDU 2050 折线分割平面 (数学)
    天梯赛L2-008 最长对称子串 (字符串处理)
  • 原文地址:https://www.cnblogs.com/attilax/p/15198901.html
Copyright © 2011-2022 走看看