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. manacher算法求最长回文子串

    一:背景 给定一个字符串,求出其最长回文子串.例如: s="abcd",最长回文长度为 1: s="ababa",最长回文长度为 5: s="abcc ...

  2. 【ASP.NET】IHttpHandler和IHttpModule

    上篇文章我们主要讲了HttpApplicatiion管道事件,那么我么如何处理这些管道事件呢,以及请求在ASP.NET是如何执行的呢,我们来了解一下IHttpHandler和IHttpModule 引 ...

  3. Codeforces 1099 A. Snowball-暴力(Codeforces Round #530 (Div. 2))

    A. Snowball time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  4. python笔记二:常用数据类型操作

    1.切片:常用于取list或tuple的部分元素的操作 1)l=[1,2,3,4,5,6] l[:3]表示取前3个值,l[1:5]表示1到5个值, L[-3:]从列表最后往前数即最后3个数.... 2 ...

  5. 贪心【CF1029E】Tree with Small Distances

    Description 给定一棵树.要求往树中加入一些边使得从1到其他节点的距离至多是2 . 输出加入边的最小数量.(边全部都是无向的) Input 第一行一个整数n,表示树中的节点个数. 接下来n− ...

  6. Linux中的命令判断

    命令判断会用到三个特殊符号分号(;),&&,|| (1).分号(;) 不考虑命令的相关性,连续执行,不保证命令全部执行成功. 例: [root@xuexi ~]# ls xxxx ; ...

  7. Python开发基础-Day24socket套接字基础2

    基于UDP的socket 面向无连接的不可靠数据传输,可以没有服务器端,只不过没有服务器端,发送的数据会被直接丢弃,并不能到达服务器端 #客户端 import socket ip_port=('127 ...

  8. [bzoj3244][noi2013]树的计数 题解

    UPD: 那位神牛的题解更新了,在这里. ------------------------------------------------------------------------------- ...

  9. AC自动机及KMP练习

    好久都没敲过KMP和AC自动机了.以前只会敲个kuangbin牌板子套题.现在重新写了自己的板子加深了印象.并且刷了一些题来增加自己的理解. KMP网上教程很多,但我的建议还是先看AC自动机(Trie ...

  10. 【Floyd】噪音恐惧症

    [UVA10048]噪音恐惧症 题面略 试题分析:直接Floyd一下维护u到v的路径最大值最小就可以了,1A 代码: #include<iostream> #include<cstr ...