美文网首页技术文摘
微信公众号调用支付宝手机网站支付

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

作者: 英文名叫夏天 | 来源:发表于2017-01-24 23:19 被阅读0次

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

为了更准确地描述业务,标题有点绕,相信多念两次就通顺了。为什么不是微信公众号支付宝支付了,因为支付宝的支付方式有很多种,手机网站支付这个接口刚好适用于微信公众号支付的场景,为什么不是支付宝手机网站支付了,因为微信公众号端和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}";}

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

相关文章

  • 记一次支付宝对接

    一、场景 微信公众号要支付宝支付,采用支付宝手机网站支付的方式。对接使用支付宝最新sdk,向前端输出form表单。...

  • 微信中使用支付宝支付

    * 场景 微信浏览器支付宝支付 * 起因 因网站用户各种质问为啥在微信公众号中支付时存在支付宝支付这一选项...

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

    该文仅对于中间这种支付方式有参考价值哟 如果你的产品经理很倔,刚好又9要求在微信公众号号中就是要调用支付宝支付,怎...

  • 2019-08-19

    blog在线点单备案图标微信公众号微信支付微信赞赏支付宝出行红包支付宝支付支付宝红包

  • 免费第三方支付平台公司

    通道已全面开通啦 微信扫码,支付宝扫码,公众号,支付宝wap, 通道已全面开通啦 微信扫码,支付宝扫码,公众号,支...

  • 支付宝用户id获取

    前言 支付宝的用户id是支付宝所有平台底下的唯一值,相当于微信公众号的openid,但是微信公众号的openid和...

  • 【微信】支付

    公众号支付 调用微信js支付接口的页面,必须接口域名授权。在公众平台中设置,最多可以授权3个。 使用微信公众号支付...

  • 移动端支付集成

    手机三方支付 目前主流方式:支付宝和微信以及银联支付。 支付宝支持两种:跳转web收银台和调用app支付,微信只能...

  • vue实现-微信网页中唤起支付宝支付

    微信浏览器内是无法唤起支付宝的,会提示在浏览器打开,类似下面 所以在微信公众号的支付宝支付最终是通过手机浏览器唤起...

  • 作业一:支付宝公众号人设分析

    作业一: 支付宝微信公众号是如何通过做好人设来提高用户黏性,让用户过目不忘的? 支付宝微信公众号几乎完美的完成了其...

网友评论

    本文标题:微信公众号调用支付宝手机网站支付

    本文链接:https://www.haomeiwen.com/subject/orhbbttx.html