Spring使用支付宝扫码支付

前一段一直在研究支付宝的扫码支付,不得不说,支付宝的文档写的真是一个烂(起码在下刚开始看的时候是mengbi的)。文档上面的示例和demo里面的示例长的完全不一样。往往文档上面的例子很简单,而demo的代码写的很复杂,所以一开始就不知道该采用哪个代码,后来仔细看了一下demo的那些包里面的代码,发现也是调用的文档示例的那些接口,这才明白它们原来是一个东西,只不过demo对文档的接口进行了一些包装而已。

首先申请一个企业的支付宝账号,这个账号有个pid,需要向这个账号里面添加应用,每个应用都有一个appid,和一个公钥和私钥。公钥和私钥可以通过支付宝提供的工具生成,另外,java开发者需要使用pkcs6格式的私钥。如果应用需要使用扫码的功能,就需要在应用里面添加当面付的选项,这个需要签约。签约了当面付功能之后,还不能直接使用,因为应用需要上线才能使用,所以开发的时候可以使用沙箱版本的应用,支付宝提供的有沙箱版本的网关、支付宝公钥、pid和appid,在配置的时候需要修改过来。

代码可以直接使用demo里面的代码,先在工程里面导入支付宝提供的api(注意不是demo代码),然后再导入demo代码,如图所示:
这里写图片描述

这里写图片描述
这个com.alipay.demo.trade.Main文件是能够直接运行的,不过需要配置一个资源文件:
这里写图片描述

# 支付宝网关名、partnerId和appId
#此为沙箱环境的网关
open_api_domain = https://openapi.alipaydev.com/gateway.do
mcloud_api_domain = http://mcloudmonitor.com/gateway.do
#此为沙箱环境的商户UID
pid = 2088102172329883
#此处请填写你沙箱环境当面付的APPID
appid = 2016082000300485

# RSA私钥、公钥和支付宝公钥
#此处请填写你的商户私钥且转PKCS8格式
private_key = MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAMKXZrFR+rnvYgBs9qz2cE1mCSIBReaqan+5Pf5+02Hyj4HzcNTTWqHFm91IH3wYPyhpM7XlbgJ5yWJtgC4g1lz75r8a+UCyuxP8by1LV/44Gi/TIfLSgATfQ73OcM9imXocRdYz2ZCwqi1gV+b3UDoy/Da5w07gRWizFzS6Vq1rAgMBAAECgYEAqHHc4GRBsRCKeinYtK1Vhqcj0Yg11Lvy85z3si0fNY26dvs8R5gFydzC/Mx5f8rNPUUYUHQn+4CqOR3D/c291X1iToV2NEVLHeJrOUDknP4oQriqt2w9pZ8rzwZp2jcWvRVUF4zTpEiMppmORP6spRfX6DLZg29SFI6GZWu6TkCQQDp3mim1BhuS3YONEZgqC69zn0/DGOFkeIx0S18qAu1X4I1FEjVTkY4HPdwihpgYajm0UFg1lk8mTiunHpZRCnAkEA1QF6U1AKjM6zsVdEnRXEDTCC75uVJGSYFJWHHx9Pjyd9vX8nSZV0Z0U4V0ZG0n0yvHj5LRO6U5FCqFRw1WixnQJBALmCKz8SvF/H9N6LiwmSPY6w5q82kNRlRc7wSceNspQT0wqL5+SACG98M0xXY5j1HmiOlHxgCTvyriXOwObivQcCQQCTNaNB4uZ3q/86R/KukbVd3DIRwLfRYAhO6Yxp8Oy+Je/bv/359+Vr3cXzYyldHZOr9/tVsPWr/Y9Q4JLemq1tAkEAlBU7+4EdzFap7e/FMgyKD5DmL8H2iAEuMRRCPL84GhFfK/7PSQ/40NgKxpTgY44NlElHXcRPw5CZu6gqdiNJOA==
#此处请填写你的商户公钥
public_key = MIGfMA0GCSqGSIbDQEBAQUAA4GNADCBiQKBgQDCl2axUfq572IAbPas9nBNZgkiAUXmqmp/uT3+ftNh8o+B83DU01qhxZvdSB98GD8oaTO15W4CeclibYAuINZc++a/GvlAsrsT/G8tS1f+OBov0yHy0oAE30O9znDPYpl6HEXWM9mQsKotYFfm91A6Mvw2ucNO4EVosxc0ulatawIDAQAB

#此为沙箱环境的公钥
alipay_public_key = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIgHnOn7LLILlKETd6BFRJ0GqgS2Y3mn1wMQmyh9zEyWlz5p1zrahRahbXAfCfSqshSNfqOmAQzSHRVjCqjsAw1jyqrXaPdKBmr90DIpIxmIyKXv4GGAkPyJ/6FTFY99uhpiq0qadD/uSzQsefWo0aTvP/65zi3eof7TcZ32oWpwIDAQAB

# 当面付最大查询次数和查询间隔(毫秒)
max_query_retry = 5
query_duration = 5000

# 当面付最大撤销次数和撤销间隔(毫秒)
max_cancel_retry = 3
cancel_duration = 2000

# 交易保障线程第一次调度延迟和调度间隔(秒)
heartbeat_delay = 5
heartbeat_duration = 900

然后运行就可以运行Main.java文件了。至于我们实际应用中的扫码支付代码可以直接copy Main.java文件中的test_trade_precreate()函数,在Controller中建立一个函数:

@RequestMapping(value = "/pay/alipay", method = RequestMethod.POST)
    public Map<String, String> alipay(@RequestParam String amount, @RequestParam int userid) {

        Map
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值