一个二维码同时支持微信和支付宝扫描的原理很简单,就是中间做了一个跳转,判断用户用的是什么浏览器请求的即可。
这里首先要说清楚的是支付宝的支付是蛮简单的,我们使用的是“手机网站支付”的方式,这种方式如果手机上安装了支付宝就会调用支付宝APP进行支付,否则是H5支付;微信支付就复杂一点了,我们用微信H5支付必须用“公众号支付”支付方式,这种方式支持H5调起支付API打开微信客户端进行支付。
对于微信公众号支付,使用到的参数应该是申请了微信公众号支付之后微信发给申请人邮件里面的参数,刚开始的时候也是被这些参数给搞晕了
appid:应用ID,大部分情况都要用到。
mch_id:商户号,下单的时候使用。
AppSecret:应用密钥,获取用户openId时用到。
sign_key:签名密钥,下单和支付的时候用于加密参数。
以下是简单的代码流程:
二维码生成地址
调用此方法生成一个二维码,用户用微信或者支付宝扫描二维码进入到下面这个方法:
这个方法的关键就是判断用户用的是什么扫描的,这个可以通过User-Agent来判断,然后在这个方法里面就可以创建订单目的是把订单编号传递给第三方支付渠道。
对于微信支付,在调用统一下单接口来创建订单的时候是,如果trade_type用的是 "JSAPI"就必须传递一个用户的openId:
因此在choosePayWay这个方法里面,如果用户是用微信扫描的,我们要返回一个用于获取用户openId的链接地址的回调地址,注意是回调地址:
choosePayWay.do
choosePayWay.jsp
这样用户点击微信支付会跳转到authorize,然后微信会回调到我们提供的回调方法userOauthAndPayOrder.do
在这个方法里面我们用拿到的code换取用户的openId
拿到用户openId我们就可以调用统一下单接口下单了:
如果下单成功,我们会拿到一个微信的订单号,然后就可以跳转到微信支付页面,同时调起微信APP进行支付了:
微信支付界面payByWeixin.jsp
只要进到这页面就会调起微信APP进行支付了。
效果图:
接下来我们说支付的支付,支付宝支付相对简单的不能再简单了,我们在choosePayWay.jsp里面添加一个连接:
点击此链接进入到payByAlipay.do,这个方法里面我们调用支付宝的“手机网站支付”接口,生成订单并发起支付,这个过程只需要一个步骤,而微信却需要两个步骤(微信是先下单,再支付),以下是调用调用支付宝支付代码:
关键点在于app_pay这个参数,如果填“Y”,则会检测是否安装支付宝APP,如果安装则打开APP支付。
效果图:
注意:
1.支付宝使用的是老的WAP支付接口
2.如果微信支付接口签名校验工具校验你提交到微信统一下单接口的XML是正确的,但你请求之后返回“签名错误”那可能是你的KEY写错了,应该是商户平台里面的KEY而不是公众号后台的KEY。
此技能大家是否有get到呢?
007Spring Security
006Spring面向切面
005运行时值注入
004bean作用域
003自动装配歧义性解决
002Conditional条件化创建bean
001profile条件化创建bean
007API网关服务Zuul
Sqlserver2008R2 如何使用bak备份文件还原数据库以及对应的失败解决方案
- 最新文章
-
java中内存分配情况
移动Android面试题
java内存回收机制详解
浅谈对xmpp的理解及应用
数据结构与算法方面
自定义View的学习(一)
Linux常用命令
统计学习方法 概论-1
2-Reverse Integer(简单)
1-TwoSum(简单)
- 热门文章
-
POJ 1696 Space Ant 【极角排序】
POJ 1066 Treasure Hunt【线段相交】
POJ 2653 Pick-up sticks【线段相交】
POJ 1556 The Doors【最短路+线段相交】
POJ 1269 Intersecting Lines【判断直线相交】
POJ 3304 Segments【叉积】
POJ 2318 TOYS【叉积+二分】
BZOJ 2186 [Sdoi2008]沙拉公主的困惑 【逆元】
POJ 1845 Sumdiv 【逆元】
POJ 2891 Strange Way to Express Integers【扩展欧几里德】【模线性方程组】