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

原创 2015年07月10日 21:26:15

 

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

 

 

 

 

 

 

 

 

 

相关文章推荐

atitit uke产品线 attilax总结.docx 1. 知识聚合 知识检索 产品线 1 2. 爬虫产品线 1 3. 发帖机产品线 1 4. 发动机产品线 1 5. O2o产品线(旅游

atitit uke产品线 attilax总结.docx   1. 知识聚合  知识检索  产品线 1 2. 爬虫产品线 1 3. 发帖机产品线 1 4. 发动机产品线 1 5. O2o产...
  • attilax
  • attilax
  • 2017年08月06日 02:56
  • 124

Atitit.研发团队与公司绩效管理的原理概论的attilax总结

Atitit.研发团队与公司绩效管理的原理概论的attilax总结   1. 四个理念 1 1.1. 绩效管理的三个目的、四个环节、五个关键2 1.2. 绩效目标smart2 2. ...
  • attilax
  • attilax
  • 2016年10月02日 00:10
  • 294

atitit.词法分析的实现token attilax总结

atitit.词法分析的实现token attilax总结   1. 词法分析(英语:lexical analysis)跟token 1 1.1. 扫描器 2 2. 单词流必须识别为保留字,标...
  • attilax
  • attilax
  • 2014年11月29日 10:58
  • 2011

Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全

Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全    1. #====提升抽象层次 1 2. #----使用通用单词 1 3. #===...
  • attilax
  • attilax
  • 2015年08月20日 15:21
  • 717

Atitit. Object-c语言 的新的特性  attilax总结

Atitit. Object-c语言 的新的特性  attilax总结   1.1. Object-C语言由 Brad J.Cox于20世纪80年代早期设计,1 1.2. Object-C新增的...
  • attilax
  • attilax
  • 2016年02月19日 23:16
  • 557

atitit.自己动手开发编译器and解释器(2) ------语法分析,语义分析,代码生成--attilax总结

atitit.自己动手开发编译器and解释器(2) ------语法分析,语义分析,代码生成--attilax总结   1. 建立AST 抽象语法树 Abstract Syntax Tree,AS...
  • attilax
  • attilax
  • 2014年12月01日 21:27
  • 2886

Atitit v2 ajax 最佳实践规范 标准化流程attilax总结 r34

Atitit  v2  ajax 最佳实践规范 标准化流程attilax总结 r34     1.1. 推荐使用fetch ,w3c标准 1 1.2. 基本用法fetch加es6 lamb...
  • attilax
  • attilax
  • 2017年03月08日 05:33
  • 38

atitit.手动配置列表文件的选择and 数据的层次结构 attilax总结最佳实践--yaml

atitit.手动配置列表文件的选择and 数据的层次结构 attilax总结最佳实践--yaml    1. yaml是个好的选择.. 1 2. 数据的层次结构--结构:hash,list,和...
  • attilax
  • attilax
  • 2015年03月02日 22:31
  • 916

atitit.系统架构图 的设计 与工具 attilax总结

atitit.系统架构图 的设计 与工具 attilax总结   1. 架构图的4个版式(标准,(左右)悬挂1 2. 架构图的层次结构(下属,同事,助手)1 3. wps ppt1 4. 使...
  • attilax
  • attilax
  • 2015年08月10日 22:48
  • 1554

Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结

Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结   1. 本文范围 1 2. Angular的优点 1 2.1. 双向数据绑定 1 2...
  • attilax
  • attilax
  • 2015年07月31日 02:56
  • 1782
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:atitit.微信支付的教程文档 attilax总结
举报原因:
原因补充:

(最多只允许输入30个字)