微信公众号调用支付宝手机网站支付

该文仅对于中间这种支付方式有参考价值哟


为了更准确地描述业务,标题有点绕,相信多念两次就通顺了。为什么不是微信公众号支付宝支付了,因为支付宝的支付方式有很多种,手机网站支付这个接口刚好适用于微信公众号支付的场景,为什么不是支付宝手机网站支付了,因为微信公众号端和web端调用又有不同,会增加一点逻辑处理。在微信商城里,同学们对如下两幅图还有印象吧,没印象的多半就是所逛的微信商城只有微信支付一种方式,对于商家来说,顾客选择哪种方式都不重要,因为他们向平台付的手续费比例都差不多,那为什么不提供支付宝支付呢,或者为什么搞得如此烦琐非要重新用浏览器打开再进行支付了,这就需要把微信叫过来问问你干嘛要屏蔽支付宝,说好的和谐社会,和平共处呢?

如果你的产品经理很倔,刚好又9要求在微信公众号号中就是要调用支付宝支付,怎么gai,希望以下工作笔记对你有用,

一、准备工作

在支付宝开放平台创建一个应用(https://openhome.alipay.com/platform/appCreate.htm)

创建成功后,从应用列表进入应用详情,为该应用添加手机网站支付功能,既申请该接口

在申请过程中需要提供你系统的url, 支付宝的要求是系统需商品信息完整且达到接入该接口的标准,这要求迷惑我好久,所以我的申请被打回n次,如果你也遇到这种情况,不要急,支付宝在线客服(https://cschannel.alipay.com/newPortal.htm?scene=mysjpt)可以帮到你

配置回调url和通知url:

二,开发步骤

这里的步骤是通过浏览器调用接口时的步骤,后面补充通过微信端调用时的情况

step1. 按照惯例,先找接口文档,会手把手教你接入该接口,接入成功后找到集成文档. 阿里做的都是良心接口,提供了demo给大家参考,新版的调用方式更是直接把工具类封装成sdk , 集成好sdk后再也不用担心怎么样去发送http请求等。
老版demo新版demo,目前新版demo只有php方式和RSA签名方式;

step2. 传递参数,以下代码在demo中都有现在的,只是需要理解每个参数的意义

这里调用成功后生成如下页面,如果将app_pay参数设置为Y,会弹出是否打开支付宝app的请求窗口。

当跳转到这个页面,你就大可放心了,支付宝已经接手,

step3.处理返回结果

密码输入成功后,交易也成功,这里又轮到我们上场了。交易完成有两个事情要做:
1.根据交易状态异步处理订单状态,即我们在准备工作中所配置的异步回调url:ALI_NOTIFY_URL = http://XXX/order/modify_order_status_alipay.html,这个方法中做了两件事,首先将解析支付宝返回的参数,再根据处理状态对订单进行处理即对系统数据库进行操作

/**

* 支付宝支付成功回调

*@return

*/

@RequestMapping("modify_order_status_alipay.html")

public voidmodifyOrderStatusAlipay(HttpServletRequest request,HttpServletResponse response)throwsIOException {

System.out.println("i am in modify_order_status_alipay");

Map> orderMap = com.hj.custsys.wechat.common.SystemCache.getInstance().getOrderList();

System.out.println("orderMap=="+ orderMap);

ModelAndView modelAndView =newModelAndView();

//获取支付宝POST过来反馈信息

Map params =newHashMap();

Map requestParams = request.getParameterMap();

for(Iterator iter = requestParams.keySet().iterator();iter.hasNext();) {

String name = (String) iter.next();

String[] values = (String[]) requestParams.get(name);

String valueStr ="";

for(inti =0;i < values.length;i++) {

valueStr = (i == values.length-1) ? valueStr + values[i]

: valueStr + values[i] +",";

}

valueStr =newString(valueStr.getBytes("ISO-8859-1"),"gbk");

params.put(name,valueStr);

}

//获取支付宝的通知返回参数

//公司Id

String companyIdStr =newString(request.getParameter("body").getBytes("ISO-8859-1"),"UTF-8");

Integer companyId = Integer.parseInt(companyIdStr);

//商户订单号

String orderId =newString(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");

//支付宝交易号

String trade_no =newString(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");

//交易状态

String trade_status =newString(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");

System.out.println("out_trade_no::"+ orderId);

System.out.println("trade_status::"+ trade_status);

String sHtmlText ="";

//   if(AlipayNotify.verify(params)){//验证成功

if(trade_status.equals("TRADE_FINISHED")) {

}else if(trade_status.equals("TRADE_SUCCESS")) {

//处理你的订单状态

}

System.out.println("状态修改成功 end");

}

System.out.println("success");

response.getWriter().println("success");

sHtmlText ="success";

/*}else{//验证失败

System.out.println("fail");

response.getWriter().println("fail");

sHtmlText= "fail";

}*/

}

2.是否进行页面跳转,如以下图片是我配置的RETURN_URL =http://XXX/order_result.html处理后的结果

三、微信端调用

前两步不用看或者只研究支付宝官方文档就可以成功将钱送给支付宝。

为什么微信端调用支付宝会单独写一节了,前面就提到过,因为微信把支付宝屏蔽了,屏蔽了。上有政策,下有对策,难不到互联网界的精兵奇才们。需要做的就是先判断客户端是否为微信,如果是微信提示用浏览器打开,大家应该对下图面熟吧,


干货在这里,

<%@pagelanguage="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>

<%@taglibprefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<%@taglibprefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

支付宝支付

正在进行支付宝支付...

请点击右上角"在浏览器中打开"

在浏览器中完成支付

请在菜单中选择"浏览器中打开"

在浏览器中完成支付

是否已完成付款?

请确保支付完成后,点击

href="${pageContext.request.contextPath}/order/payment_verify.html?companyId=${companyId}&orderId=${orderId}">完成付款

varcontextPath ="${pageContext.request.contextPath}";

varua =navigator.userAgent.toLowerCase();

if(ua.match(/MicroMessenger/i) =="micromessenger") {

$(".container").css("display","block");

if(ua.indexOf('iphone') != -1|| ua.indexOf('ipad') != -1|| ua.indexOf('ipod') != -1) {

$(".weixin-tip-img-iphone").css("display","block");

$(".weixin-tip-img-android").css("display","none");

}else{

$(".weixin-tip-img-iphone").css("display","none");

$(".weixin-tip-img-android").css("display","block");

}

}else{

self.location.href= contextPath +"/order/ali_payment.html?companyId=${companyId}&orderId=${orderId}";}

原理就是一直判断客户端是否为支付宝支持的客户端, 直到满足条件为止,满足条件后操作流程就回到了上一步 。 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容