atitit.微信支付的教程文档 attilax总结
来源:互联网 发布:知乎 无色方糖 编辑:程序博客网 时间:2024/06/03 18:44
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的支持...特别是支付林吧的时候儿.
- atitit.微信支付的教程文档 attilax总结
- Atitit 文档的格式演变attilax总结
- atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结
- Atitit.常用分区api的attilax总结
- Atitit. Derby的使用总结attilax
- atitit.事件驱动的总结attilax
- Atitit.rsa密钥生成器的attilax总结
- Atitit 作用域的理解attilax总结
- Atitit wsdl的原理attilax总结
- Atitit 架构的原则attilax总结
- Atitit 大龄软件工程师的出路attilax总结
- Atitit 学习的方法 attilax总结
- Atitit需求文档模板大纲目录 attilax总结
- atitit.LimeSurvey 安装 attilax 总结
- Atitit 软件工程概览attilax总结
- Atitit 转移特效attilax总结
- Atitit 财政支出学习心得 attilax总结
- Atitit diy战略 attilax总结
- 如何在discuz帖子中插入视频
- Subsets
- 任正非转型狠招:如何让宝马追上特斯拉?
- 欢迎使用CSDN-markdown编辑器
- Swift之使用UIAlertController实现UIActionsheet
- atitit.微信支付的教程文档 attilax总结
- Android_Touch事件的分发和消费机制
- IOS--UI--LessonNavigationController
- COCOS2D-X 学习
- 给儿子讲美国独立战争
- 42.翻转单词顺序VS左旋转字符串
- Atitit. 脚本语言的断点单步调试的设计与实现 attialx 总结 php 参照java
- cairo绘图png,pdf,svg
- android动画的透明度渐变、旋转动画、缩放动画、评议动画