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. 获取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/
要有一个通过备案的域名+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. 获取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. 可用性设计:手动支付,再次支付按钮要有
10.5. 测试方面的支持
Debug模式,可以使用在调用开头的时候儿...
Stopstep:: 可以指定stopstep
Show html code的支持...特别是支付林吧的时候儿.
转载于:https://www.cnblogs.com/attilax/p/5963668.html
atitit.微信支付的教程文档 attilax总结相关推荐
- 微信支付平台技术文档的一个小坑
一.注意服务器的时间与微信接口是否相同,如时间不同接口也不通即使是0.1秒 二.调用支付相关接口需要加载私钥,和证书两个认证文件,官网文档给了java和php两个demo,逻辑应该是一样的,但实际却走 ...
- android微信支付插件,AppCan文档中心-Android微信插件接入指引
开发者在使用APPCAN平台提供的微信插件时,需要配置相关的包名,AppID和签名.具体步骤如下(以大众版打包为例): 1. 获取apk相关的包名和签名 1.1包名 自定义包名(推荐使用) APPCA ...
- python使用微信设置-微信 python 接口 -- itchat 文档
itchat 一. 安装 $ pip install itchat 特殊的字典使用方式 通过打印 itchat 的用户以及注册消息的参数, 可以发现这些值都是字典. 但实际上 itchat 精心构造了 ...
- 手机微信如何打印word文档,微信中接收文件怎么打印
作为一个文艺青年,特别喜欢在手机上写一些辞藻华丽的语言,有些语言可以代表自己当心的心境,有些语言则纯属个人鉴赏.平常我总要打开手机上的记事软件,输入一段话保存一下,有时候还会在空闲之余,在电脑的文档上 ...
- 【转】(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration
原创至上,移步请戳:(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration 5.Animation Integration(动画集成) 动画 ...
- jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档。
jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档. jquery.cookie中的操作: jquery.cookie.js是一个基于jquer ...
- 【转】(五)unity4.6Ugui中文教程文档-------概要-UGUI Interaction Components
原创至上,移步请戳:(五)unity4.6Ugui中文教程文档-------概要-UGUI Interaction Components 4.Interaction Components 本节涵盖了处 ...
- MAC微信接收到的文档打开都变成(只读)解决办法
在使用mac电办公的时候,经常会需要处理office文档,但经常就是打开别人发来的office文档,我们习惯的就是先点击, 然后在点击上方的使用xxx打开.结果点击打开后,标题上就是显示只读. 解决办 ...
- Atitit db analysis statistics tonjyi fsy数据库统计分析目录1. Atitit 数据库表与注释文档与统计(表,说明) 11.1. 获取表列表 数据库包含哪些
Atitit db analysis statistics tonjyi fsy数据库统计分析 目录 1. Atitit 数据库表与注释文档与统计(表,说明) 1 1.1. 获取表列表 数据库包 ...
最新文章
- Fedora下配置网卡
- 2020年SAP项目艰辛曲折的开工历程 II
- 通用数据库管理工具DBeaver
- Windows 7/8.1 仍可免费升级至 Windows 10
- 网页变灰配合全国哀悼日的css代码
- 全面解析java注解
- 数据结构----数组与广义表专题
- 自定义异常时exception is never thrown in the corresponding try block和unhandled exception
- java如何返回之前代码_java – 如何在每次返回之前向消息添加代码?
- Codeforces Round #715 (Div. 1) C. Complete the MST 补图 + 思维 + 最小生成树
- javafx阴影_JavaFX技巧23:节省内存! 属性的阴影场
- [TED] Kinect控制的四翼直升机
- python 找质数的个数_用Python打造一款文件搜索工具,所有功能自己定义!
- 文思创新面试总结(1)
- [CH5E02] A Little Shop of Flowers
- 我最喜欢的ORM工具—Simple Data(转)
- ubuntu14.04-安装flash
- 前端技术—CSS常用代码大全
- sqlalchemy 8 会话 与 异常
- 免费福利 Unity3D 项目资源分享链接(消消乐、斗地主、AR等)
热门文章
- Linux 挂在命令mount
- depcomp: line 571: exec: g++: not found
- 【转】ofbiz数据库表结构设计
- Android开发技巧——大图裁剪
- 通向架构师的道路(第十七天)IBM Websphere集群探秘-WASND
- 【ASP.NET】服务器控件大演练与实例分析
- 探讨“临时对象”(temporary object)
- 我的20天项目经历--至今令我难忘的技术难题
- MONGODB 数据库文件读取的优化
- Could not find *.apk!解决办法