开发者社区> 李不言> 正文

支付宝支付开发

简介: 最近在接入各种支付机构,鉴于各种产品业务需求不同,具体开发实现不尽相同,不讨论具体业务实现。 前一篇银联支付开发介绍了几种银联支付交互方法和实例报文。本文主要回顾一下支付宝常用支付方式的开发和交互报文,还有在开发时遇到的一些坑。
+关注继续查看

最近在接入各种支付机构,鉴于各种产品业务需求不同,具体开发实现不尽相同,不讨论具体业务实现。
前一篇银联支付开发介绍了几种银联支付交互方法和实例报文。本文主要回顾一下支付宝常用支付方式的开发和交互报文,还有在开发时遇到的一些坑。
支付宝支付产品大全,主要介绍:

一、手机网站支付

手机网站支付主要应用于手机、掌上电脑等无线设备的网页上,通过网页跳转或浏览器自带的支付宝快捷支付实现买家付款的功能,资金即时到账。

根据请求参数,后台将相关参数值填好,组装成HTML报文之后返回给客户端即可,比较重要的几个参数

参数 参数名称 参数说明 样例
service 接口名称 接口名称 alipay.wap.create.direct.pay.by.user
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 </head>
 <body>
   <form id="alipaysubmit" name="alipaysubmit" action="https://mapi.alipay.com/gateway.do?_input_charset=utf-8" method="get">
   <input type="hidden" name="service" value="alipay.wap.create.direct.pay.by.user" />
   <input type="hidden" name="partner" value="合作商户ID,需要跟支付宝申请" />
   <input type="hidden" name="_input_charset" value="utf-8" />
   <input type="hidden" name="sign_type" value="MD5" />
   <input type="hidden" name="sign" value="78ff1f0d498b6bc1302b9fcb96e25edf" />
   <input type="hidden" name="notify_url" value="http://127.0.0.1:8080/pay-front/aliPayResultNotify" />
   <input type="hidden" name="return_url" value="http://127.0.0.1:8080/Service/toReturn.action" />
   <input type="hidden" name="out_trade_no" value="00652016012716580911842412986916" />
   <input type="hidden" name="subject" value="1" />
   <input type="hidden" name="total_fee" value="0.01" />
   <input type="hidden" name="seller_id" value="合作商户ID,需要跟支付宝申请" />
   <input type="hidden" name="payment_type" value="1" />
   <input type="hidden" name="body" value="20160127|10201601271658060548484552912431|ALIPAY-WAP|1" />
   <input type="hidden" name="exter_invoke_ip" value="112.97.57.54" />
   </form>
   <script>document.forms['alipaysubmit'].submit();</script>
 </body>
</html>

表单提交后跳到支付宝页面:

img_11f68ff434a705d4933bb2ea79b5a233.png
QQ截图20160314151617.png

支付成功后支付宝会根据请求参数的notify_url返回到商户后台,然后完成剩余逻辑即可。

二、及时到账

及时到账其实就是手机到账的PC网页版,不知道为什么支付宝没有把这2个整合到一起。及时到账的开发跟手机网站支付区别不大,请求参数service有区别:

参数 参数名称 参数说明 样例
service 接口名称 接口名称 create_direct_pay_by_user

组装成HTML提交即可。

三、移动支付

移动支付是一种程序式的支付方式,在手机、掌上电脑等无线设备的应用程序内,买家可通过支付宝进行付款购买特定服务或商品,资金即时到账。

移动支付说白了就是你的移动设备安装了支付宝app,付款时在客户端上调起支付宝的支付控件,完成支付过程。

参数 参数名称 参数说明 样例
service 接口名称 接口名称 mobile.securitypay.pay
img_e82390bc28688b8519a05aa5122bf646.jpe
Cache_6e7892108021bc7c.jpg

四、说明(遇到的坑)

关于签名
支付宝支持的签名方式较多,MD5、RSA都支持,其中移动支付目前仅支持RSA签名方式,其他方式都支持MD5/RSA,需要说明的是,MD5签名的时候是将key按字母顺序排序,然后拼上从支付宝申请的MD5 key,组成一个新的字符串,然后签名,如:

key-value如下

_input_charset=utf-8&body=20160128|10201601281559200554074030492283|ALIPAY-WAP|1&exter_invoke_ip=112.97.61.254&notify_url=http://127.0.0.1:8080/&out_trade_no=00652016012815592280050374808082&service=alipay.wap.create.direct.pay.by.user&subject=1&total_fee=0.01

假设你从支付宝申请的MD5 KEY为:aabbccddeeff
拼接上去后是:

_input_charset=utf-8&body=20160128|10201601281559200554074030492283|ALIPAY-WAP|1&exter_invoke_ip=112.97.61.254&notify_url=http://127.0.0.1:8080/&out_trade_no=00652016012815592280050374808082&service=alipay.wap.create.direct.pay.by.user&subject=1&total_fee=0.01aabbccddeeff

之前做微信支付的时候定势思维,以为两者的拼接方式相同,下意识的也这么做,结果一直验签不过,微信的拼接方式是,在原来字符串的基础上加上"&key=MD5 KEY",如:

_input_charset=utf-8&body=20160128|10201601281559200554074030492283|ALIPAY-WAP|1&exter_invoke_ip=112.97.61.254&notify_url=http://127.0.0.1:8080/&out_trade_no=00652016012815592280050374808082&service=alipay.wap.create.direct.pay.by.user&subject=1&total_fee=0.01&key=aabbccddeeff

然后再计算MD5。

值得注意的是,计算MD5签名难道不大,但是跟支付宝调试的时候容易出现验签不过,比较多的都是签名串与提交表单的input不同字符编码不同……为了解决编码不同导致的验签不过,我们通常在表单头中加入:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

移动支付中,需要对签名值进行一次URL编码,但是,在支付结果通知的报文的签名值却不需要对签名值进行URL解密,比较奇怪的地方。

   try {
            /**
             * 仅需对sign 做URL编码
             */
            sign = URLEncoder.encode(sign, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
9269 0
文档小喇叭 | 支付宝小程序开发常见问题 FAQ
小程序开发疑难杂症解决方案大盘点!
6637 0
【开发课堂】支付宝小程序灰度常见问题
支付宝小程序灰度测试的常见问题
2475 0
java支付宝开发-异常-01-"sub_code":"isv.invalid-app-id","sub_msg":"无效的AppID参数"
一、现象 无论请求哪个接口都报这个错误 二、异常原因 后来检查了一下,发现是因为 我支付宝网关写错了。沙箱环境和正式环境 的支付宝网关不同,如下   //支付宝网关名-正式环境 //public static final String OPEN_API_DOMAIN="https://openapi.
5074 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24882 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18199 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
13786 0
android支付宝支付开发过程
原文: android支付宝支付开发过程 支付宝开发流程: 1、在支付宝申请一个账号并开通开发者功能和移动支付的功能。 支付宝地址:https://auth.
1085 0
+关注
李不言
码农,搬砖的
25
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载