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

1. 支付流程概览 1

2. 设置支付起始文件夹   host/app/paydir/ 1

3. 设置oauth验证域名 1

4. 測试文件夹 能够使用ip,但必须80port好像。

1

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

6. Start.jsp 2

7. 获取openid的page接口,并制定回调接口 2

8. 開始支付页面 3

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

10. 注意事项 5

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

1. 支付流程概览

首先,生成一个prepayID

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

2. 设置支付起始文件夹   host/app/paydir/

要有一个通过备案的域名+80port,不能使用ip形式,也不能其它port号(好像域名+port号能够)

假设測试。能够使用測试文件夹

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

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

3. 设置oauth验证域名

实际上能够设置ip+port

4. 測试文件夹 能够使用ip,但必须80port好像。

要手动加入測试白名单。。然后就能够測试了。。

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. 获取openid的page接口。并制定回调接口

<%

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%>

注意,这个url的host+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. 可用性设计:手动支付,再次支付button要有

10.5. 測试方面的支持

Debug模式,能够使用在调用开头的时候儿...

Stopstep:: 能够指定stopstep

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

atitit.微信支付的教程文档 attilax总结的更多相关文章

  1. Atitit 基于图片图像 与文档混合文件夹的分类

    Atitit 基于图片图像 与文档混合文件夹的分类 太小的文档(txt doc csv exl ppt pptx)单独分类 Mov10KminiDoc 但是可能会有一些书法图片迁移,因为他们很微小,需 ...

  2. Atitit 微信支付 支付结果通用通知

    Atitit 微信支付 支付结果通用通知 Wechat hto sh ma  返回页面return_url - 熊佳佳的博客 d ,only notyfi url-... 接口链接 该链接是通过[统一 ...

  3. ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料

    本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/  谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三. ...

  4. jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档。

    jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档. jquery.cookie中的操作: jquery.cookie.js是一个基于jquer ...

  5. dot.js教程文档api

    dot.js是一个短小精悍的js模板引擎,压缩版仅有4K大小,最近使用dot的时候整理出这个dot.js教程文档,其实称不上什么教程,只是对dot.js的介绍和实例,希望能帮助到一部分需要的人. 使用 ...

  6. ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)

    本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...

  7. 【转】(八)unity4.6Ugui中文教程文档-------概要-UGUI Rich Text

    原创至上,移步请戳:(八)unity4.6Ugui中文教程文档-------概要-UGUI Rich Text 7.Rich Text UI元素和文本网格的文本可以合并多个字体样式和大小.对 UI系统 ...

  8. 【转】(七)unity4.6Ugui中文教程文档-------概要-UGUI Auto Layout

    原创至上,移步请戳:(七)unity4.6Ugui中文教程文档-------概要-UGUI Auto Layout 6. Auto Layout Rect Transform布局系统是足够灵活,可以处 ...

  9. 【转】(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration

    原创至上,移步请戳:(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration 5.Animation Integration(动画集成) 动画 ...

随机推荐

  1. LD_PRELOAD的妙用,让python支持自己编译的Sqlite

    LD_PRELOAD的妙用,让python支持自己编译的Sqlite LD_PRELOAD=/usr/local/sqlite/lib/libsqlite3.so.0 python3 -c " ...

  2. Crontab 在linux中的非常有用的Schedule Jobs

    crontab 是linux系统集成的定时任务命令,它对于系统运行(数据的备份,调度系统资源或命令,程序的定时触发等非常有用).crontab有些类似于Windows系统的Service的任务计划程序 ...

  3. 17-7-26-react-router入门

    完蛋了,上司最近都和颜悦色的,搞得我跑路的决心大大减退,不过还是要跑路.毕竟面向工资编程.今天一天基本都在挑项目的CSS,由于是别人哪里直接copy的,然后css我也直接copy的codepen上的源 ...

  4. POJ 1062 昂贵的聘礼 【带限制的最短路/建模】

    年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低要求.酋长说:" ...

  5. 循序渐进PYTHON3(十三) --3-- DJANGO之FORM表单(为自动生成的HTML标签添加样式)

    views.py from django.shortcuts import render,HttpResponse from django import forms import json impor ...

  6. 拜拜了,GOPATH君!新版本Golang的包管理入门教程

    Go 1.11和1.12实现了对包管理的初步支持,Go的新依赖管理系统使依赖版本信息明确且易于管理.Using Go Modules - The Go Blog 新的包管理模式有什么不同? 作为Go语 ...

  7. [BZOJ1860][ZJOI2006]Mahjong(DP)

    1860: [Zjoi2006]Mahjong麻将 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 412  Solved: 248[Submit][Sta ...

  8. 【数论】nefu118 n!后面有多少个0

    就是求n!有多少个因子2和因子5,并在这两者中取较小者.因为必须要一个2和一个5才能拼出1个10. 显然2的数量多于5,因此只需要求n!有多少个因子5即可. n!中素因子p的个数= [n/p]+[n/ ...

  9. Token-Pasting Operator (##) and Stringizing Operator (#)

    Token-Pasting Operator (##)The double-number-sign or “token-pasting” operator (##), which is sometim ...

  10. TCP连接 断开

     参考:http://blog.csdn.net/cyberhero/article/details/5827181 1.建立连接协议 (三次握手)      (1)客户端发送一个带SYN标志的TCP ...