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. Java并发编程实战笔记

    如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误.有三种方式可以修复这个问题: i.不在线程之间共享该状态变量 ii.将状态变量修改为不可变的变量 iii.在访问状态变 ...

  2. 一个菜鸟正在用SSH写一个论坛(2)

    额 一不小心又一个多月没有写过随笔了. 这次是在某次启动服务器的时候报错了: 严重: Exception starting filter struts2 Unable to load configur ...

  3. python正则表达式中的分组 group

    维基百科:http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C ...

  4. 挑战python 之一马当先(python的广搜)

    下过象棋的人都知道,马只能走'日'字形(包括旋转90°的日),现在想象一下,给你一个n行m列网格棋盘, 棋盘的左下角有一匹马,请你计算至少需要几步可以将它移动到棋盘的右上角,若无法走到,则输出-1. ...

  5. 【stl小记】list

    list相当于双向链表,所以快插快删比较方便(链式数据结构的性质),但是随机读取较慢 用一道luogu的水题做一做list,code如下 #include <cstdio> #includ ...

  6. POJ 2348 Euclid's Game 博弈论

    http://poj.org/problem?id=2348 顺便说,必应翻译真的好用,比谷歌翻译好用100倍. 很难判断这道题的具体博弈类型. 有两种写法,一种是找规律,一种是推理得到关系后循环(或 ...

  7. cream 的qsqrt 及其原理

    首先,是creamk 的qsort: float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5 ...

  8. luogu 6月月赛 E 「数学」约数个数和

    题面在这里! 第一眼感觉炒鸡水啊...只要把N质因数分解一下,因为k次约数相当于求k+2元一次方程的非负整数解,所以答案就是和每个质因子指数有关的一些组合数乘起来. 但是要用pillard's rho ...

  9. 【最短路】【spfa】CDOJ1633 去年春恨却来时,落花人独立,微雨燕双飞

    对于S集合中的数,例如a1,考虑到如果x能够被表示出来,那么x+a1也一定能被表示出来 设d[r]为所有模a1余r的数中,能被表示出来的最小的数 用d[x]+ai去更新d[(x+ai)%a1],跑最短 ...

  10. [转]Spring Security学习总结二

    原文链接: http://www.blogjava.net/redhatlinux/archive/2008/08/20/223148.html http://www.blogjava.net/red ...