支付宝Wap支付你了解多少?
上几篇文章详细介绍了支付宝APP支付、微信APP支付
此文章来介绍下支付宝Wap支付(也叫作手机网站支付)
目录
1、创建应用并获取APPID
2、配置应用环境
3、配置沙箱环境
4、服务端实现(Maven添加本地Jar包、集成并配置SDK)
先上官方文档入口,支付宝文档入口模仿微信最最近做了更新,变得更简洁明了。
【官方手机网站支付快速接入文档】
1、创建应用并获取APPID
这个比较简单可以参考《开放平台应用创建指南》
2、配置应用环境
开发者调用接口前需要先生成RSA密钥,RSA密钥包含应用私钥(APP_PRIVATE_KEY)、应用公钥(APP_PUBLIC_KEY)。生成密钥后在开放平台管理中心进行密钥配置,配置完成后可以获取支付宝公钥(ALIPAY_PUBLIC_KEY)。详细步骤请参考《配置应用环境》。
为了方便开发者生成一对RSA密钥支付宝提供一键生成工具,具体如何生成与配置密钥详见签名专区。
WINDOWS
MAC_OSX
下载该工具后,解压打开文件夹,运行“RSA签名验签工具.bat”(WINDOWS)或“RSA签名验签工具.command”(MAC_OSX)。
以下演示截图
Window 配置应用环境生成相关Key截图参考上篇文档支付宝APP支付
以下是Mac电脑生成RSA密钥工具截图
工具生成一对RSA密钥之后将公钥配置到应用环境。
生成的私钥需妥善保管,避免遗失,不要泄露。应用私钥需填写到代码中供签名时使用。应用公钥需提供给支付宝账号管理者上传到支付宝开放平台。
3、配置沙箱环境
注意:沙箱环境的密钥最好与正式上线的应用进行区分避免一些不必要的麻烦。WAP支付支持沙箱环境而app支付不支持沙箱环境
【官方介绍质料-箱环境使用说明】
上传对应的公钥,沙箱账号待会在测试的时候回使用到
4、服务端实现(集成并配置SDK)
【官方资源下载地址】
服务端SDK下载与简介
Maven项目中使用本地JAR包
1、首先我在项目根目录中创建一个lib文件夹,将jar包拷贝到lib文件夹下
2、然后我们在maven的pom.xml中配置
<dependency><groupId>com.alibaba</groupId><artifactId>alipay-sdk-java</artifactId><version>20161129201425</version><scope>system</scope><systemPath>${project.basedir}/lib/alipay-sdk-java20161129201425.jar</systemPath>
</dependency>
3、这里的groupId和artifactId以及version都是可以随便填写的 ,scope必须填写为system,而systemPath我们现在我们jar包的地址就可以了
4、最后我们必须在maven打包的过程中加入我们这个jar包。因为项目运行的时候需要这个Jar,并且我们得拷贝在WEB-INF/lib目录下
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration> <webResources> <resource> <directory>${project.basedir}/lib</directory> <targetPath>WEB-INF/lib</targetPath> <filtering>false</filtering> <includes> <include>**/*.jar</include> </includes> </resource> </webResources>
</configuration>
<version>2.1.1</version>
集成
在使用SDK调用具体API前,需要先配置通用接入参数
1、
APP_ID
使用沙箱模式中的APP_ID
.
2、APP_PRIVATE_KEY
ALIPAY_PUBLIC_KEY
使用文章2、配置应用环境
中生成的测试密钥.
3、CHARSET
默认使用UTF-8
然后,使用上述接入参数初始化AlipayClient:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",APP_ID,APP_PRIVATE_KEY,"json",CHARSET,ALIPAY_PUBLIC_KEY);
接下来,就可以用alipayClient来调用具体的API了。alipayClient只需要初始化一次,后续调用不同的API都可以使用同一个alipayClient对象。
手机网站支付不支持第三方授权,不能代商家发起请求。
调用接口
手机网站支付产品包含两类API:
页面跳转类:需要从前端页面以Form表单的形式发起请求,浏览器会自动跳转至支付宝的相关页面(一般是收银台或签约页面),用户在该页面完成相关业务操作后再回跳到商户指定页面。例如本产品中的手机网站支付接口alipay.trade.wap.pay。
系统调用类:直接从服务端发起HTTP请求,支付宝会同步返回请求结果。例如本产品中的交易查询等配套API。
调用流程图
使用SDK快速接入
手机网站支付alipay.trade.wap.pay:
对于页面跳转类API,SDK不会也无法像系统调用类API一样自动请求支付宝并获得结果,而是在接受request请求对象后,为开发者生成前台页面请求需要的完整form表单的html(包含自动提交脚本),商户直接将这个表单的String输出到http response中即可。
public void doPost(HttpServletRequest httpRequest,HttpServletResponse httpResponse) throws ServletException, IOException {AlipayClient alipayClient = ... //获得初始化的AlipayClientAlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的requestalipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp");alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址alipayRequest.setBizContent("{" +" \"out_trade_no\":\"20150320010101002\"," +" \"total_amount\":88.88," +" \"subject\":\"Iphone6 16G\"," +" \"seller_id\":\"2088123456789012\"," +" \"product_code\":\"QUICK_WAP_PAY\"" +" }");//填充业务参数String form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单httpResponse.setContentType("text/html;charset=" + AlipayServiceEnvConstants.CHARSET);httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面httpResponse.getWriter().flush();
}
异步通知验签
Map<String, String> paramsMap = ... //将异步通知中收到的所有参数都存放到map中
boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, ALIPAY_PUBLIC_KEY, CHARSET) //调用SDK验证签名
if(signVerfied){// TODO 验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
}else{// TODO 验签失败则记录异常日志,并在response中返回failure.
}
服务端具体封装
将参数独立配置在一个属性文件中方便管理,当然也可以从数据库
加载接入参数并初始化
AlipayClient
使用SDK快速接入代码封装
public void wapPay(){String body="我是测试数据";String subject="Iphone6 16G";String total_amount="0.01";String passback_params="1";BizContent content = new BizContent();content.setBody(body);content.setOut_trade_no(OrderInfoUtil2_0.getOutTradeNo());;content.setPassback_params(passback_params);content.setSubject(subject);content.setTotal_amount(total_amount);content.setProduct_code("QUICK_WAP_PAY");try {AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的requestalipayRequest.setReturnUrl("http://javen.tunnel.qydev.com/alipay/return_url");alipayRequest.setNotifyUrl("http://javen.tunnel.qydev.com/alipay/notify_url");//在公共参数中设置回跳和通知地址//参数参考 https://doc.open.alipay.com/doc2/detail.htm?treeId=203&articleId=105463&docType=1#s0System.out.println(JsonKit.toJson(content));alipayRequest.setBizContent(JsonKit.toJson(content));//填充业务参数String form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单HttpServletResponse httpResponse = getResponse();httpResponse.setContentType("text/html;charset=" + charset);httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面httpResponse.getWriter().flush();} catch (Exception e) {e.printStackTrace();}renderNull();}
public void return_url(){//total_amount=0.01×tamp=2016-12-02+18%3A11%3A42&sign=vPhxaI5bf7uSab9HuqQ4fvjLOggzpnnLK9svOdZCZ9N1mge4qm63R4k%2FowlTHbwyGCNG0%2F4PthfYbjFx22%2B2WpBNvccxajw%2Btba1Aab6EKPOAW8BoLLFFwgExtLB9ydhWL5kpP8YSLolO%2F9pkGBy5TNldz7HxdB2j6vISrD8qCs%3D&trade_no=2016120221001004200200187882&sign_type=RSA&auth_app_id=2016102000727659&charset=UTF-8&seller_id=2088102180432465&method=alipay.trade.wap.pay.return&app_id=2016102000727659&out_trade_no=120218111214806&version=1.0String params = getRequest().getQueryString();System.out.println("return_url回调参数:"+params);renderText("return_url回调参数:"+params);}
public void notify_url(){String params =HttpKit.readData(getRequest());try {Map<String, String> paramsMap = getParameterMap(params);//将异步通知中收到的所有参数都存放到map中for(Map.Entry<String, String> entry:paramsMap.entrySet()){ System.out.println(entry.getKey()+"--->"+entry.getValue()); } System.out.println("alipayPulicKey>"+alipayPulicKey);boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, alipayPulicKey, charset); //调用SDK验证签名if(signVerified){// TODO 验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failurerenderText("success");}else{// TODO 验签失败则记录异常日志,并在response中返回failure.renderText("failure");}} catch (AlipayApiException e) {e.printStackTrace();}renderText("failure");}
此项目源码【下载地址】
测试
下载部署如果没有做任何修改默认的分别为:
测试地址:http://域名或者IP/alipay/wapPay
回跳地址:http://域名或者IP/alipay/return_url
通知地址:http://域名或者IP/alipay/notify_url
测试截图
推荐阅读
Android版-微信APP支付
极速开发微信公众号之微信买单
极速开发微信公众号之公众号支付
极速开发微信公众号之扫码支付
极速开发微信公众号之刷卡支付
极速开发微信公众号之现金红包
Android版-支付宝APP支付
记录学习的点滴,以此勉励不断奋斗的自己✌️✌️✌️ 如果对你有帮助记得点喜欢
源码下载地址
支付宝Wap支付你了解多少?相关推荐
- 支付宝WAP支付接口开发
支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...
- WebView支付宝wap支付转支付宝客户端支付
android WebView支付宝wap支付转支付宝客户端支付重写WebViewClient的以下方法即可.可参考 支付宝平台文档商户APP的WebView处理alipays协议 public bo ...
- php 公众号内h5支付宝支付宝支付宝支付宝支付,微信浏览器中支付宝wap支付和微信JSAPI公众号支付...
手机浏览器只有支付宝wap支付,微信浏览器中出现支付宝wap支付和微信JSAPI公众号支付,其中支付宝wap在线支付没有在新窗口打开(兼容大部分手机),Thinkphp3.2公众号支付 下载资源 下载 ...
- 支付宝 Wap 支付的两种实现方式
点击▲关注 "爪哇妹" 给公众号标星置顶 更多摄影技巧 第一时间直达 简介 适用于商家在移动端网页应用中集成支付宝支付功能.商家在网页中调用支付宝提供的网页支付接口调起支付宝客户端 ...
- java 支付宝wap支付初识
最近突然想弄下支付宝的支付,因为感觉很好玩.中间遇到很多问题,查查找找,总算是整了两天给整出来了,这里为自己记录下. 第一步:直接去安卓支付宝的官方文档去,写的很清楚了已经,这里有源码https:// ...
- java支付宝wap支付_SpringBoot 支付宝H5Wap沙盒环境手机网站支付
在这里介绍的是使用SpringBoot 来完成对H5Wap移动端网页沙盒环境的手机网站支付 * {+ I) s9 |- c* E先贴上支付宝沙盒环境应用网站 ( p0 b8 ^1 \0 A8 i% N ...
- 支付宝WAP支付总结
一:支付宝开放文档: 支付宝手机网站支付的开发文档: https://docs.open.alipay.com/203 二:配置应用环境: 开发者调用接口前需要先生成RSA2密钥,RSA2密钥包含应用 ...
- 支付宝wap支付过程中需要注意的坑
1,首先本人使用的是新版即时到帐的接口文档开发.本人没有使用支付宝的sdk包,所有代码都有自己参考Sdk包自己编写.并且wap手机支付异步通知和同步通知(新版称前台回调),都集成在之前开发的电脑扫码支 ...
- php支付宝wap支付详解,alipay_wap
软件简介 目的 支付宝的demo很搓 项目需要接入很多支付,磋上加搓,不是特别好管理 本类库的目标 完成跟支付宝手机网关支付对接的功能 便于后面扩展(利用各种Handler),可测试 如何使用本类库? ...
最新文章
- 深度学习中的验证集和超参数简介
- 【前沿技术】被“围剿”的比特币,一个月“吃”掉4500万度电!
- [翻译] DTCoreText 从HTML文档中创建富文本
- css 横线_CSS-画一个太极阴阳图
- 在linux下安装VITIS-AI人工智能开发环境配置
- 统计字符串中各类型的数字个数
- OWC组件生成柱状图
- 淘宝跨域获取Cookie分析
- Java备份Oracle数据库
- 拳王虚拟项目公社:通过网络卖虚拟产品,月入1W的全自动化推广引流技术
- HRBUST1754 Minimum Scalar Product【序列处理】
- HDU1420 Prepared for New Acmer【快速模幂】
- Android应用开发的一些思考
- dom4j解析xml_JAVADom、Sax解析XML详解
- $.ajax.submit,jQuery中的AjaxSubmit使用讲解
- ASC2BCD及奇偶校验位
- numpy-poly1d、polyfit、polyval多项式使用
- 服务器部署v1.0方案问题分析
- springcloud阿里巴巴五大组件
- “鲲鹏”展翅 宝德“自强”