文档章节

Spring MVC 使用支付宝接口完成在线支付的示例代码

x
 xp半梦半醒
发布于 2017/09/01 14:57
字数 949
阅读 99
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

本篇文章主要介绍了Spring MVC 使用支付宝接口完成在线支付的示例代码,具有一定的参考价值,有兴趣的可以了解一下

项目中要使用到在线支付功能 目前常用的在线支付手段主要是 支付宝 和微信。 

这里我使用的是支付宝支付,支付宝有个好处就是他有一个沙箱模式 即使没有申请渠道的资格也可以体验一把在线支付。

第一步:完善沙箱信息 

进入支付宝的开发者中心 就可以看到有个沙箱环境

使用支付宝提供的秘钥生成工具 生成对应的秘钥 一定要保存好。支付宝推荐使用RSA2(SHA256)秘钥 

把自己的公钥填上去就可以了。

http://files.jb51.net/file_images/article/201708/2017811151050673.png?201771115115

第二步 阅读在线支付开发文档

里面需要的配置信息 对应的使用沙箱环境的信息

第三步 环境搭建

下载服务端SDK 并添加到项目中

这里我使用的maven项目 导入本地jar包采用了下列方式

<dependency>

     <groupId>com.alipay</groupId>

     <artifactId>alipay</artifactId>

     <version>1.1.1</version>

     <scope>system</scope>

     <!--本地jar的路径,相对或者绝对都可以-->

     <systemPath>${project.basedir}/lib/alipay-sdk-java20170307171631.jar</systemPath>

   </dependency>

   <dependency>

     <groupId>com.alipay1</groupId>

     <artifactId>commons</artifactId>

     <version>1.1.1</version>

     <scope>system</scope>

     <!--本地jar的路径,相对或者绝对都可以-->

     <systemPath>${project.basedir}/lib/commons-logging-1.1.1.jar</systemPath>

   </dependency>

 

1、  调用接口 启动支付页面 具体参数说明 请查看文档

2、 //转到支付页面

3、     //初始化客户端 只需要实例化一次(线程安全)

4、     AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do"

5、         , "2016080300153333", GlobalConstant.APP_PRIVATE_KEY, "json", "UTF-8", GlobalConstant.ALIPAY_PUBLIC_KEY, "RSA2");

6、     AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request

7、     //在公共参数中设置回跳和通知地址

8、     alipayRequest.setReturnUrl("回跳地址");

9、     //异步回调一定是要在外网 不然支付宝服务器无法访问

10、     alipayRequest.setNotifyUrl("异步回调地址");

11、     alipayRequest.setBizContent("{" +

12、         "  \"out_trade_no\":\"" + orderId + "\"," +

13、         "  \"total_amount\":\"" + fetchParcel.getMoney() + "\"," +

14、         "  \"subject\":\"代领快递\"," +

15、         "  \"seller_id\":\"2088102169684935\"," +

16、         "  \"product_code\":\"QUICK_WAP_PAY\"" +

17、         " }");//填充业务参数

18、     String form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单

19、     httpResponse.setContentType("text/html;charset=utf-8");

20、     httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面

21、     httpResponse.getWriter().flush();

 

1、接收同步回调展示 结果 此结果只是展示,具体状态必须依赖支付宝的异步通知

2、接收异步回调更改订单状态 支付宝的异步回调 是服务器之间的通讯并不会产生页面 并且 设置的回调地址 

一定是要在外网上的 不然支付宝的服务器是无法访问该地址的 

对回调得到的信息要使用支付宝的api进行校验

//将异步通知中收到的所有参数都存放到map中

  Map<String, String> paramsMap =new HashMap<>();

  paramsMap.put("tarde_no",trade_no);

  paramsMap.put("trade_status",trade_status);

  paramsMap.put("total_amount",total_amount);

  paramsMap.put("out_trade_no",out_trade_no);

  boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, GlobalConstant.ALIPAY_PUBLIC_KEY, "UTF-8", "RSA2");     //调用SDK验证签名

  if (signVerified) {

    //验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure

    String out_trade_no1 = paramsMap.get("out_trade_no");

    String trade_status1 = paramsMap.get("trade_status");

    logger.info(out_trade_no1+":"+trade_status1);

    return "success";

  } else {

    //验签失败则记录异常日志,并在response中返回failure.

    return "failure";

  }

 

4 进行支付体验

http://files.jb51.net/file_images/article/201708/2017811151220306.png?2017711151232

这里选择支付宝账号登录 账号 密码 在沙箱环境中可以找到 (买家账号)建议下载支付宝沙箱钱包 可以模拟在线支付调用钱包客户端的效果

以上就是本文的全部内容,希望对大家的学习有所帮助

 

x
粉丝 0
博文 3
码字总数 1893
作品 0
苏州
私信 提问
加载中
请先登录后再评论。
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
CDH5: 使用parcels配置lzo

一、Parcel 部署步骤 1 下载: 首先需要下载 Parcel。下载完成后,Parcel 将驻留在 Cloudera Manager 主机的本地目录中。 2 分配: Parcel 下载后,将分配到群集中的所有主机上并解压缩。 3 激...

cloud-coder
2014/07/01
6.9K
1
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
7.7K
8
TDD的测试框架--Machine.Specification

Machine.Specification 是一个 TDD 测试驱动开发的测试框架,简化了测试,无需关心语言本身特性。 Machine.Specifications 带来的好处是不需要在代码里有注释,但同时阅读代码的人可以一目了...

匿名
2013/01/22
1.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

红队之windows用户和组

目录 0x01 用户账户和组策略 0x02 Windows中的访问控制 0x03 安全标识符SID 0x04 用户账户控制(UAC) 用户帐户 用户帐户是对计算机用户身份的标识,本地用户帐户、密码存在本地计算机上,只...

黑白天安全团队
昨天
15
0
厉害了!百度智能云NIRO Pro智能机器人半年内连获三项产品设计大奖

短短半年内,百度智能云NIRO Pro智能机器人连获三项产品设计大奖,其中包括有“设计界奥斯卡”之称的德国红点奖,成功引领了全球助理机器人的工业设计和发展趋势风向标。红点奖评委这样评价,...

百度智能云
2019/12/04
5
0
StringBuider 在什么条件下、如何使用效率更高?

作者:后青春期的Keats cnblogs.com/keatsCoder/p/13212289.html 引言 都说 StringBuilder 在处理字符串拼接上效率要强于 String,但有时候我们的理解可能会存在一定的偏差。最近我在测试数据...

Object_Man
今天
11
0
发布更新|腾讯云 Serverless 产品动态 20200813

一、云函数 SCF + Ckafka 联合转储方案正式发布 发布时间: 2020-08-06 产品背景: SCF + Ckafka 联合转储方案可以帮忙用户节省使用与开发成本,用户可以将 Ckafka 消息转储同步转储至消息队...

腾讯云Serverless
今天
5
0
如何正确强制执行Git推送? - How do I properly force a Git push?

问题: I've set up a remote non-bare "main" repo and cloned it to my computer. 我已经建立了一个远程的非裸露的“主”仓库,并将其克隆到我的计算机上。 I made some local changes, u......

javail
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部