atitit.微信支付的教程文档 attilax总结
atitit.微信支付的教程文档 attilax总结
2. 设置支付起始文件夹 host/app/paydir/ 1
1
5. 发起測试支付,菜单 host/fromother.jsp 2
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总结的更多相关文章
- Atitit 基于图片图像 与文档混合文件夹的分类
Atitit 基于图片图像 与文档混合文件夹的分类 太小的文档(txt doc csv exl ppt pptx)单独分类 Mov10KminiDoc 但是可能会有一些书法图片迁移,因为他们很微小,需 ...
- Atitit 微信支付 支付结果通用通知
Atitit 微信支付 支付结果通用通知 Wechat hto sh ma 返回页面return_url - 熊佳佳的博客 d ,only notyfi url-... 接口链接 该链接是通过[统一 ...
- ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/ 谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三. ...
- jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档。
jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档. jquery.cookie中的操作: jquery.cookie.js是一个基于jquer ...
- dot.js教程文档api
dot.js是一个短小精悍的js模板引擎,压缩版仅有4K大小,最近使用dot的时候整理出这个dot.js教程文档,其实称不上什么教程,只是对dot.js的介绍和实例,希望能帮助到一部分需要的人. 使用 ...
- ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...
- 【转】(八)unity4.6Ugui中文教程文档-------概要-UGUI Rich Text
原创至上,移步请戳:(八)unity4.6Ugui中文教程文档-------概要-UGUI Rich Text 7.Rich Text UI元素和文本网格的文本可以合并多个字体样式和大小.对 UI系统 ...
- 【转】(七)unity4.6Ugui中文教程文档-------概要-UGUI Auto Layout
原创至上,移步请戳:(七)unity4.6Ugui中文教程文档-------概要-UGUI Auto Layout 6. Auto Layout Rect Transform布局系统是足够灵活,可以处 ...
- 【转】(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration
原创至上,移步请戳:(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration 5.Animation Integration(动画集成) 动画 ...
随机推荐
- SpringBoot学习:整合Mybatis,使用HikariCP超高性能数据源
一.添加pom依赖jar包: <!--整合mybatis--> <dependency> <groupId>org.mybatis.spring.boot</ ...
- Codeforces 1099 B. Squares and Segments-思维(Codeforces Round #530 (Div. 2))
B. Squares and Segments time limit per test 1 second memory limit per test 256 megabytes input stand ...
- ORACLE数据库创建动态表
最近公司一个项目代码里的定时任务无法执行,查验代码良久,奈何代码过于老旧,开发人员换了一茬又一茬,现在都无法理清,故无奈只好到数据库里重新写存过,配置定时任务. 在写存过时,由于检测及安全性能要求,需 ...
- 洛谷P2236 HNOI2002 彩票 [暴搜]
题目传送门 彩票 分析: 虽然题目标签上标的是Splay,但我一个蒟蒻至今也沒掌握平衡树,所以就索性一个暴搜,加一点剪枝就水过去了- 代码: #include<cstdio> #inclu ...
- 【BZOJ 4025】 (CDQ?还是整体二分?+并查集及它的恢复操作)
4025: 二分图 Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考 ...
- 【DFS】佳佳的魔法阵
[vijos1284]佳佳的魔法阵 背景 也许是为了捕捉猎物(捕捉MM?),也许是因为其它原因,总之,佳佳准备设计一个魔法阵.而设计魔法阵涉及到的最关键问题,似乎就是那些带有魔力的宝石的摆放…… 描述 ...
- CSS写作建议和性能优化总结(未完待续)
这里是我从网上的一篇文章看过来的,这里先做一点小结,之后再补充. 1.CSS渲染规则 今天在微博的一篇文章上看到的,之前我都以为渲染是从左往右渲染.发现我的想法是错的.之所以采用从右往左的渲染规则,是 ...
- Generator函数(二)
for...of循环 1.for...of循环可以自动遍历Generator函数,不需要再调用next方法 function* helloWorldGenerator(){ yield 'hello' ...
- 关于abstract class 和 interface
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系.但是,一个类却可以实现多个interface. 2.在abstract class 中可以有自己 ...
- 【RocketMQ】【分布式事务】使用RocketMQ实现分布式事务
参考地址:https://blog.csdn.net/zyw23zyw23/article/details/79070044 视频地址:https://v.youku.com/v_show/id_XO ...