摘要:最近的一个项目中涉及到了支付业务,其中用到了微信支付和支付宝支付,在做的过程中也遇到些问题,正好马上放假了,公司不忙了,所以现在总结梳理一下,分享给有需要的人,也为自己以后回顾留个思路。
一:支付宝支付接入准备工作:
首先,支付宝支付和微信支付意愿,都是只支持企业用户,个人用户是不能接入支付宝支付的,所以要想接入支付宝支付,首先需要有支付宝的企业账号,有了企业账号才能拿到支付宝支付的所需参数,这些工作都是需要公司层面的人操作的,作为码农,只管拿到这些需要的参数就可以进行看文档,对接支付支付接口了。那支付宝支付都需要哪些参数呢,请看下面:
上面就是支付宝支付需要的各类参数,在开始写代码之前,需要先把这些参数配置好才能进行下面的工作。
二:支付宝(电脑网站支付)接口说明:
首页访问支付宝的开放平台:电脑网站支付 | 支付应用,然后查看快速接入文档,首先是创建应用,然后是配置密钥,最好是搭建和配置开放环境。配置好上面的各项工作,下面来看下支付宝支付的接口说明:
alipay.trade.page.pay(PC场景下单并支付)
支付流程
公共参数
请求地址:
环境 | HTTPS请求地址 |
正式环境 |
公共请求参数:
参数 | 类型 | 是否必填 | 最大长度 | 描述 | 示例值 |
app_id | String | 是 | 32 | 支付宝分配给开发者的应用ID | 2014072300007148 |
method | String | 是 | 128 | 接口名称 | alipay.trade.page.pay |
format | String | 否 | 40 | 仅支持JSON | JSON |
return_url | String | 否 | 256 | 同步返回地址,HTTP/HTTPS开头字符串 | 支付宝 |
charset | String | 是 | 10 | 请求使用的编码格式,如utf-8,gbk,gb2312等 | utf-8 |
sign_type | String | 是 | 10 | 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2 | RSA2 |
sign | String | 是 | 256 | 商户请求参数的签名串,详见签名 | 详见示例 |
timestamp | String | 是 | 19 | 发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" | 2014-07-24 03:07:50 |
version | String | 是 | 3 | 调用的接口版本,固定为:1.0 | 1.0 |
notify_url | String | 否 | 256 | 支付宝服务器主动通知商户服务器里指定的页面http/https路径。 | |
biz_content | String | 是 | - | 业务请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递,具体参照各产品快速接入文档 |
请求参数
参数 | 类型 | 是否必填 | 最大长度 | 描述 | 示例值 |
out_trade_no | String | 是 | 64 | 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复 | 20150320010101001 |
product_code | String | 是 | 64 | 销售产品码,与支付宝签约的产品码名称。 注:目前仅支持FAST_INSTANT_TRADE_PAY | FAST_INSTANT_TRADE_PAY |
total_amount | Price | 是 | 11 | 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] | 88.88 |
subject | String | 是 | 256 | 订单标题 | Iphone6 16G |
body | String | 否 | 128 | 订单描述 | Iphone6 16G |
goods_detail | String | 否 | 订单包含的商品列表信息,Json格式: {"show_url":"https://或http://打头的商品的展示地址"} ,在支付时,可点击商品名称跳转到该地址 | {"show_url":"https://www.alipay.com"} | |
passback_params | String | 否 | 512 | 公用回传参数,如果请求时传递了该参数,则返回给商户时会回传该参数。支付宝只会在异步通知时将该参数原样返回。本参数必须进行UrlEncode之后才可以发送给支付宝 | merchantBizType%3d3C%26merchantBizNo%3d2016010101111 |
extend_params | String | 否 | 业务扩展参数,详见业务扩展参数说明 | {"sys_service_provider_id":"2088511833207846"} | |
goods_type | String | 否 | 2 | 商品主类型:0—虚拟类商品,1—实物类商品(默认) | 0 |
timeout_express | String | 否 | 6 | 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。 该参数在请求到支付宝时开始计时。 | 90m |
enable_pay_channels | String | 否 | 128 | 可用渠道,用户只能在指定渠道范围内支付 | pcredit,moneyFund,debitCardExpress |
disable_pay_channels | String | 否 | 128 | 禁用渠道,用户不可用指定渠道支付 | pcredit,moneyFund,debitCardExpress |
auth_token | String | 否 | 40 | 获取用户授权信息,可实现如免登功能。获取方法请查阅:用户信息授权 | appopenBb64d181d0146481ab6a762c00714cC27 |
qr_pay_mode | String | 否 | 2 | PC扫码支付的方式,支持前置模式和跳转模式。 | 4 |
qrcode_width | String | 否 | 4 | 商户自定义二维码宽度 注:qr_pay_mode=4时该参数生效 | 100 |
三:下载支付宝的SDK
下载地址:网页&移动应用学习路径 | 支付应用,下载后可以导入本地,然后修改对应的配置,就可以测试支付接口了
四:安装支付宝的SDKmaven依赖
由于我们准备使用支付宝提供的SDK实现支付接口的对接,所以需要把支付宝的SDK安装到我们的本地maven仓库,安装命令如下:
安装好支付宝的SDK后,就可以在maven项目里面引用该依赖了,如下:
五:支付宝支付的核心代码
六:运行支付宝支付URL:http://dvnq2b.natappfree.cc/alipay/pay,返回如下支付二维码页面:
支付成功返回页面:
支付宝回调日志如下,其中包括了同步回调和异步回调:
七:总结:
经过上面的所以流程,相信大家都明白了支付宝支付的流程,这里我们对上面的流程做个总结,要想接入支付宝支付,必须是企业用户才行,个人用户不支持,所以在开始写代码之前,要和公司的相关负责人申请好支付宝支付的相关配置参数,有了这些才能进行下面的工作,这里最重要的一点就是支付宝支付的回调了,回调,在生产环境必须配置可以外网访问的URL,同时域名必须是备案过的,二级域名也可以,这里我们为了方便测试,所以就使用了内网穿透工具natapp,该工具既有免费通道也有收费通道,收费通道也很便宜,如果只是测试,免费通道就够用了,另外还有一点要注意,就是支付宝支付的回调,默认支付宝是回调多次的,所以会有重复回调的问题,这里留给大家一个思考,怎么防止支付宝的多次回调,以免影响业务,希望有兴趣的小伙伴可以留言交流。以上就是支付宝支付(电脑网站支付)的全部内容了