alipay rsarsapublickey 是什么参数

App接入支付宝-爱编程
App接入支付宝
闲得蛋疼接了一个坑死人的项目,,其中有一块涉及到支付宝即时到账服务,本来想使用第三方提供的服务,然而为了安全考虑,使用阿里提供的sdk自己开发接口
首先申请支付宝账号,顺便入驻开放平台,申请账号完毕后,直接找到沙箱环境
在这个地方,用到的就是APP ID和支付宝的RSA2公钥,看到这个地方,接下来我们需要的就是支付宝的密钥了,,为了方便,直接下载支付宝提供的工具
直接这样生成就好了,然后将公钥提交到沙箱的公钥里,然后就搞定了,,私钥自己保留好,,这样就配置的差不多了
然后,下载php的sdk
下载完成后放到服务器上,由于阿里给的文档不够完善,,我看源码找了好久,而且此前没有接触此类开发,,遇到了不少麻烦,这里直接记录下
require_once './aop/AopClient.php';
require_once './aop/request/AlipayTradeAppPayRequest.php';
$c = new AopC
$c-&gatewayUrl = &/gateway.do&;
$c-&appId = &8126&;
$c-&rsaPrivateKey = '私钥';
$c-&format = &json&;
$c-&charset= &utf-8&;
$c-&signType= &RSA2&;
$c-&alipayrsaPublicKey = '支付宝公钥';
$request = new AlipayTradeAppPayRequest ();
$request-&setBizContent(&{\&timeout_express\&:\&30m\&,\&product_code\&:\&QUICK_MSECURITY_PAY\&,\&total_amount\&:\&0.01\&,\&subject\&:\&1\&,\&body\&:\&我是测试数据\&,\&out_trade_no\&:\&325\&}&);
echo $c-&sdkExecute($request);
注意的是上面的是支付宝公钥,,不是应用公钥,网关不用配置,这个只是提供一个思路,具体实现就不放出来了
服务器端大体就这样,返回值如下
服务器到这里就差不多了,安卓端的搭建就直接使用官方的demo修改,
所需要的目录结构就是这样了,然后直接调用接口就可以了,代码如下:
public void payV2(View v) {
final String[] res = {&&};
new Thread(){
public void run() {
super.run();
URL url = new URL(&http://192.168.137.149/api/&);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod(&GET&);
urlConnection.setConnectTimeout(6*1000);
if(urlConnection.getResponseCode()==200){
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String line = &&;
while ((line = reader.readLine())!=null ){
Log.i(&订单获取&, res[0]);
Runnable payRunnable = new Runnable() {
public void run() {
PayTask alipay = new PayTask(PayDemoActivity.this);
Map&String, String& result = alipay.payV2(res[0], true);
Log.i(&msp&, result.toString());
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
mHandler.sendMessage(msg);
Thread payThread = new Thread(payRunnable);
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
payThread.start();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}.start();
当然,这只是最简单的使用,到这个地方就基本完成了,不过这个是使用的服务器预设的订单信息,实际应用中,应该用客户端传递数据过去,服务器返回加签的订单信息,然后客户端调用sdk支付,最后支付宝服务器,通知app服务器,最后修改订单状态
版权所有 爱编程 (C) Copyright 2012. . All Rights Reserved.
闽ICP备号-3
微信扫一扫关注爱编程,每天为您推送一篇经典技术文章。当前位置: >
安卓App接入支付宝详解
时间: 15:33 来源:互联网 作者:源码搜藏 浏览:
闲得蛋疼接了一个坑死人的项目,,其中有一块涉及到支付宝即时到账服务,本来想使用第三方提供的服务,然而为了安全考虑,使用阿里提供的sdk自己开发接口首先申请支付宝账号,顺便入驻开放平台,申请账号完毕后,直接找到沙箱环境 在这个地方,用到的就是APP
闲得蛋疼接了一个坑死人的项目,,其中有一块涉及到支付宝即时到账服务,本来想使用第三方提供的服务,然而为了安全考虑,使用阿里提供的sdk自己开发接口首先申请支付宝账号,顺便入驻开放平台,申请账号完毕后,直接找到沙箱环境
在这个地方,用到的就是APP ID和支付宝的RSA2公钥,看到这个地方,接下来我们需要的就是支付宝的密钥了,,为了方便,直接下载支付宝提供的工具/...
直接这样生成就好了,然后将公钥提交到沙箱的公钥里,然后就搞定了,,私钥自己保留好,,这样就配置的差不多了
然后,下载php的sdk&/d...
下载完成后放到服务器上,由于阿里给的文档不够完善,,我看源码找了好久,而且此前没有接触此类开发,,遇到了不少麻烦,这里直接记录下
require_once './aop/AopClient.php';
require_once './aop/request/AlipayTradeAppPayRequest.php';
$c = new AopC
$c-&gatewayUrl = &/gateway.do&;
$c-&appId = &8126&;
$c-&rsaPrivateKey = '私钥';
$c-&format = &json&;
$c-&charset= &utf-8&;
$c-&signType= &RSA2&;
$c-&alipayrsaPublicKey = '支付宝公钥';
$request = new AlipayTradeAppPayRequest ();
$request-&setBizContent(&{\&timeout_express\&:\&30m\&,\&product_code\&:\&QUICK_MSECURITY_PAY\&,\&total_amount\&:\&0.01\&,\&subject\&:\&1\&,\&body\&:\&我是测试数据\&,\&out_trade_no\&:\&325\&}&);
echo $c-&sdkExecute($request);
注意的是上面的是支付宝公钥,,不是应用公钥,网关不用配置,这个只是提供一个思路,具体实现就不放出来了服务器端大体就这样,返回值如下
服务器到这里就差不多了,安卓端的搭建就直接使用官方的demo修改,
所需要的目录结构就是这样了,然后直接调用接口就可以了,代码如下:
public void payV2(View v) {
final String[] res = {&&};
new Thread(){
public void run() {
super.run();
URL url = new URL(&http://192.168.137.149/api/&);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod(&GET&);
urlConnection.setConnectTimeout(6*1000);
if(urlConnection.getResponseCode()==200){
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String line = &&;
while ((line = reader.readLine())!=null ){
Log.i(&订单获取&, res[0]);
Runnable payRunnable = new Runnable() {
public void run() {
PayTask alipay = new PayTask(PayDemoActivity.this);
Map&String, String& result = alipay.payV2(res[0], true);
Log.i(&msp&, result.toString());
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
mHandler.sendMessage(msg);
Thread payThread = new Thread(payRunnable);
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
payThread.start();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}.start();
当然,这只是最简单的使用,到这个地方就基本完成了,不过这个是使用的服务器预设的订单信息,实际应用中,应该用客户端传递数据过去,服务器返回加签的订单信息,然后客户端调用sdk支付,最后支付宝服务器,通知app服务器,最后修改订单状态支付宝手机接口,服务端PHP验证失败 - PHP当前位置:& &&&支付宝手机接口,服务端PHP验证失败支付宝手机接口,服务端PHP验证失败&&网友分享于:&&浏览:250次支付宝手机接口,服务端PHP验证失败,求助本帖最后由 js 于
17:12:11 编辑
最近做支付宝手机接口郁闷死了&求大神们帮忙~!
问题1:手机端安卓自然是JAVA,而服务端是PHP,在做支付宝异步验证notify_url的时候,按照支付宝的demo来操作验证失败,用日志做调查后发现传过来的$_POST['sign']验证参数&在base64_decode时,返回的竟然是乱码,这里就疑问,难道在JAVA端用BASE64加密后&在PHP端解密不能?&求解~!
问题2:在服务器PHP端验证要用到3个PEM文件,3个文件的格式到底是啥,我问了支付宝技术支持,一个人说,用支付宝提供的软件生成的rsa_private_key.pem和rsa_public_key.pem是否不用去掉头和尾,直接替换掉key文件夹下的2个同名文件?&还是要去掉头和尾空格与换行&直接留一行字符串?(这部分按照文档的写了&照样不通过,才来问的~!)
问题3:最后一个pem文件&alipay_public_key看文档说是按照上传的公钥,复制下来后去换行和空格,但是当openssl验证文件&载入之后&openssl_get_publickey返回的竟然为空,这个真心纠结了,然后我又尝试用原文件rsa_public_key改成openssl_get_publickey这时候返回提示Resource&id&#20或者Resource&id&#21
网上查的要死&也没找到这2个提示&啥意思!&&
求各位大师指点~!~!&
------解决方案--------------------既不懂java也没支付宝编程经验的多嘴一句——
会不会是字节型数据的问题?
php处理这个要小心,因为php对字节和字串是混合的
如果不是这个问题就再等有相关经验的人的答案吧------解决方案--------------------问支付宝技术人员------解决方案--------------------一步步来,先不要base64,发原字串过去,看看php收到的是什么,这样可以确定是否字节型数据
然后再encode和decode
key那个也是同样操作------解决方案--------------------支付宝的异步返回是不经过你手机端的,是支付宝服务器主动发起的请求(你异步填写的那个url).
你可以先查看你的加密方式,&是md5&还是rsa
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有本开发文档的阅读对象为:
具有一定开发能力,了解PHP、JAVA、.NET等开发语言的开发、维护或管理人员。
优化支付渠道及返回参数
完善接入规范,方便商户接入
优化文档结构,整合结果码
整合 2.0 接口内容、交易流程、接入规范等内容
支付宝针对线下商户所推出的组合支付产品,包含条码支付、扫码支付、声波支付。
商户通过扫码枪扫描用户支付宝客户端的“付款码”,并完成支付的过程。
商户生成二维码,用户通过支付宝客户端扫码,并完成支付的过程。
通过麦克风识别用户支付宝客户端所发出的声波讯息,并完成支付的过程。
商户后台和支付宝后台根据相同算法各自生成一个相同的结果,该结果用以校
验双方身份的合法性。
支付宝分配给开发者的应用ID号,用于标识一个应用,通常为16位数字。
用于标识一个用户在商户端的身份,商户可通过Open ID判断是否为同一名用户。
显示二维码的商户收银终端
在商户收银终端,通常采用双屏显示器给用户显示二维码,或将打印出的二维码信息直接张贴出来供用户扫描。
图3.1 双屏收银台(显示二维码)
图3.2 可打印二维码的POS终端
智能终端设备
已装有支付宝客户端的智能移动设备,包括支持 ios、android、Windows Phone 系统的手机、PAD 等。
图 3.3 智能终端设备(手机)
图 3.4 智能终端设备(PAD)
扫码支付,指用户打开支付宝中的“扫一扫”功能,扫描商户展示在各种场景的二维码并进行支付的模式。该模式适用于线下实体店支付、面对面支付等场景。
步骤1:用户打开支付宝(建议8.0以上版本),点击左上角“扫一扫”(图3.5);
步骤2:进入扫一扫页面(图3.6),将摄像头对准二维码或条形码(用户可通过底部button切换条形码/二维码扫码模式);
图3.5 支付宝首页
图3.6 扫一扫页面
步骤3:扫码成功后,支付宝将获取条码信息并引导用户确认交易(图3.7)。
步骤4:确认交易后,支付宝系统会判断是否需验证支付密码;若不需验证支付密码,确认后即可完成交易;否则,将弹出支付密码输入界面(图3.8),验证密码后即可完成交易。
图3.7 交易确认界面
图3.8 密码输入界面
完整交易流程
扫码支付的完整交易流程如下(图3.9):
图3.9 扫码支付流程
异常流程(撤销订单)
因网络或系统异常导致支付状态不明时撤销订单的流程(图3.10)。
图3.10 异常处理流程(撤销订单)
退款处理流程(图3.11);
图3.11 退款处理流程
商户接入支付宝扫码支付时,调用API须遵循以下规则:
传输方式为保证交易安全性,采用 HTTPS 传输
提交方式采用 POST 方法提交
数据格式返回参数均为 JSON 格式
字符编码支持 GBK、GB2312、UTF-8 字符编码
签名算法商户生成签名字符串,现支持的签名算法类型为 RSA
签名要求请求和接收数据均需要校验签名
支付宝开放平台采用了 RSA 安全签名机制,开发者可以通过支付宝公钥验证消息来源,同时可使用自己的私钥对信息进行加密。RSA 算法及数字签名机制是支付
宝开放平台与开发者网关安全通信的基础,若开发者不熟悉 RSA 及数字签名,请先查阅相关资料。
RSA 私钥及公钥生成
1. 生成 RSA 私钥及公钥,请详见“”
商户上传公钥
签约扫码支付产品的开发者,将自动获得一个系统生成的服务窗应用,该应用可配置密钥并对接各种接口,而不需重新创建应用。
原服务窗开发者可以使用在服务窗后台(/)已登记的公钥,无需重新上传公钥。
开发者登录“应用管理”功能后,在服务窗应用对应的操作栏中点击“配置密钥”,转入如下界面:
图4.1 配置密钥(未上传公钥时)
在出现的弹框中填入OpenSSL工具生成的公钥。
公钥文件需去除头尾、换行和空格,仅需填入字符串。
图4.2 上传公钥
转换前pem文件格式:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxL
DkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unorm
YQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/Q
pkddCVXnZ4bAUaQjXQIDAQAB
-----END PUBLIC KEY-----
转换后的字符串:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxL
DkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unorm
YQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/
QpkddCVXnZ4bAUaQjXQIDAQAB
下载支付宝公钥
在支付宝开放平台创建应用后,在服务窗应用中进入“配置密钥”,转入如下页面。
图4.3 配置密钥(已上传公钥时)
点击“查看支付宝公钥”,可查看支付宝 RSA 公钥。
图4.4 获取支付宝公钥
支付宝公钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB
PEM格式化后的支付宝公钥:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkr
IvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsra
prwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUr
CmZYI/FCEa3/cNMW0QIDAQAB
-----END PUBLIC KEY-----
建议开发者使用支付宝提供的 SDK 进行应用开发,使用 SDK 进行开发有以下
SDK会随着新接口的发布而同步更新
SDK会随着老接口的更新而同步更新
SDK让底层逻辑变得透明和简单,开发者只需关注于自身的业务逻辑
SDK集成了编码、签名等常用方法,开发者无需额外耗费时间
提供了基于SDK开发的Demo,开发者上手更容易
SDK下载地址详见:
集成SDK后,会由SDK自动完成加签验签逻辑,故无需阅读下述加签验签内容,只需要下载支付宝公钥。
支付宝网关与开发者的通信主要由开发者主动调用支付宝网关接口(下文简称OpenAPI)实现。其中支付宝网关地址:
支付宝开放平台的OpenAPI调用采取POST方式(application/x-www-form-urlencoded),内容通过键值对(Key-Value)的形式作为参数传入,在接口调用时,需要对传入的数据进行签名,签名方法如下:
1.以下是扫码支付请求API的参数列表,如:
method=alipay.trade.precreate,
app_id=7148,
charset=utf-8,
sign_type=RSA,
sign=MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL4HgSt9hfOpv9MSwgUvfpgOH7WkC7WrTr84m29b0VfnZtK+9jv/YPXYr+22DrxfWJkdPiXJvSjifxPudlqjX21l6/8k79i/4HRCz8DBcdw5jqROfpoq0l3vYfPVqJGwSqaPhtM1Bb4hAD2yLlN2ukfCbshSntUEFd4ozocLolW/AgMBAAECgYBVHTNj8WMQElYTCnHQtMc1AA5/4yxDgKlSyN4F8NBBWSoa9uF/WhFpzFZwWH0dLm+WlRyC/Gs3ZsuYd9SXIFna9mv49+cEfObSzJhvW5DXOVCi+c4Ap3cTsXZiAj8DMsoCb9OjRHNl/BqzN0kl0Wm1diZvXl9YgSRqbzpXzoj4oQJBAOYLSk87XFYodvwr4aL3KFjZZZhHj1Jpp/q61SNgB03aXqZu9m+hk1X4mTGn4rhA7Cl2ZuL+OoxxnJFDw0cbMRcCQQDTeGgx0VUC+O3zAtzMmocjE7WuesRC3IjhU30of4GGjQzIXvKOQCCuUF2DHvIkrB/k2E75n8+TI9matbLS11mZAkEAtSek7/oF/89Dy9dei2/o9PbVu3J22eZcIuVoHMBtYBCbwqLVLBloJiZrtR/JOWHe19Pmt9COGLULH5XmPKOcJwJAUZnP0xFs1XXLFA/Rtd4XMXDklYxn+UjyRMibrintiEcbXKJOxJd4ROtb+kHRvFbzA7J4XxjM14Fo8asVcwiIWQJAVco+9qQzZ7JZzFzk0KTWhQlfbcRByLX25XIPbIes2lmY2uM895yrY/8kbGx2JgD/VGITWwth+uuutXUQ9K6HIw==,
timestamp= 03:07:50,
biz_content={
"out_trade_no": "",
"total_amount": "88.88",
"discount_amount":"8.88",
"unDiscount_amount": "80",
"subject": "当面付二维码支付",
"goods_detail": [
"goods_id": "apple-01",
"goods_name": "ipad",
"goods_category": "7788230",
"price": "88.88",
"quantity": "1"
"operator_id": "op001",
"store_id": "pudong001",
"terminal_id": "t_001",
"time_expire": "01"
2.将所有POST参数(sign除外)进行字典排序,组成字符串,如:
ap_id=48&biz_conte={"outTradeNo":",toalAmount":
"8.8",discountAmount":8.",unDiscountAmount":80",subject": 扫码支付",godsDetail": [{"godsI":
"aple-01",godsName":ipad",godsCategory":78230",price":8.8",quantiy":1"}],"operatorId":
"op01",storeId":pudong01",terminalId":t_01",timeExpire":
""}&charset=utf-8&method=alipay.trade.precate&timestamp=:750
3.进行RSA签名后获得sign,再经过Base64编码,其最终的请求报文样式参考如下:
REQUEST URL: /gateway.do?charset=utf-8
(注:根据选择的charset设值)
REQUEST METHOD: POST
method=alipay.trade.precreate,
app_id=7148,
charset=utf-8
sign_type=RSA,
sign=MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL4HgSt9hfOpv9MSwgUvfpgOH7WkC7WrTr84m29b0VfnZtK+9jv/YPXYr+22DrxfWJkdPiXJvSjifxPudlqjX21l6/8k79i/4HRCz8DBcdw5jqROfpoq0l3vYfPVqJGwSqaPhtM1Bb4hAD2yLlN2ukfCbshSntUEFd4ozocLolW/AgMBAAECgYBVHTNj8WMQElYTCnHQtMc1AA5/4yxDgKlSyN4F8NBBWSoa9uF/WhFpzFZwWH0dLm+WlRyC/Gs3ZsuYd9SXIFna9mv49+cEfObSzJhvW5DXOVCi+c4Ap3cTsXZiAj8DMsoCb9OjRHNl/BqzN0kl0Wm1diZvXl9YgSRqbzpXzoj4oQJBAOYLSk87XFYodvwr4aL3KFjZZZhHj1Jpp/q61SNgB03aXqZu9m+hk1X4mTGn4rhA7Cl2ZuL+OoxxnJFDw0cbMRcCQQDTeGgx0VUC+O3zAtzMmocjE7WuesRC3IjhU30of4GGjQzIXvKOQCCuUF2DHvIkrB/k2E75n8+TI9matbLS11mZAkEAtSek7/oF/89Dy9dei2/o9PbVu3J22eZcIuVoHMBtYBCbwqLVLBloJiZrtR/JOWHe19Pmt9COGLULH5XmPKOcJwJAUZnP0xFs1XXLFA/Rtd4XMXDklYxn+UjyRMibrintiEcbXKJOxJd4ROtb+kHRvFbzA7J4XxjM14Fo8asVcwiIWQJAVco+9qQzZ7JZzFzk0KTWhQlfbcRByLX25XIPbIes2lmY2uM895yrY/8kbGx2JgD/VGITWwth+uuutXUQ9K6HIw==,
timestamp= 03:07:50,
biz_content={
out_trade_no: "",
"total_amount": "88.88",
"discount_amount":"8.88",
"unDiscount_amount": "80",
"subject": "当面付二维码支付",
"goods_detail": [
"goods_id": "apple-01",
"goods_name": "ipad",
"goods_category": "7788230",
"price": "88.88",
"quantity": "1"
"operator_id": "op001",
"store_id": "pudong001",
"terminal_id": "t_001",
"time_expire": "01"
没有值的参数无需传递,也无需包含进待签名数据;
将字符转化成字节流时指定的字符集应与charset一致;
charset参数需拼接在post请求的REQUEST URL之后,详见上文参考,同时 charset 参数也放在表单里面,并参与签名;
根据HTTP协议要求,传递参数的值中如果存在特殊字符(如:&、@等),那么该值需要做URL Encoding,这样请求接收方才能接收到正确的参数。此时,待签名数据应该是原始值而不是encoding之后的值
同步返回结果的验签
调用支付宝开放平台接口后,支付宝会向开发者登记网关发送回传信息。为保证信息安全,会经支付宝私钥进行RSA加密,开发者收到消息后可通过支付宝RSA公钥进行解密。
1.以调用支付宝支付API为例,返回JSON格式,需要对返回结果进行验签。
"alipay_trade_precreate_response": {
"code": "10000",
"msg": "处理成功",
"out_trade_no": "8248",
"qr_code": "/bavh4wjlxf12tper3a"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
2.取出alipay_trade_pay_response部分,即为待签名字符串
"code": "10000",
"msg": "处理成功",
"out_trade_no": "8248",
"qr_code": "/bavh4wjlxf12tper3a"
3.将签名参数(sign)使用base64解码为字节码串
4.使用RSA的验签方法,通过签名字符串、签名参数(经过base64解码)及支付宝公钥验证签名。
网关返回错误码汇总
code(错误代码)
msg(错误代码描述)
sub_code(明细错误码)
sub_msg(明细错误码描述)
Service Currently Unavailable
aop.unsupport-operation
不支持的操作
Service Currently Unavailable
aop.unknow-error
Service Currently Unavailable
isp.unknow-error
Insufficient Token Permissions
aop.invalid-auth-token
无效的访问令牌
Insufficient Token Permissions
aop.auth-token-time-out
访问令牌已过期
Missing Required Arguments
isv.missing-method
缺少方法名参数
Missing Required Arguments
isv.missing-platform
缺少平台来源名参数
Missing Required Arguments
isv.missing-signature
缺少签名参数
Missing Required Arguments
isv.missing-app-access-token
缺少应用访问令牌
Missing Required Arguments
isv.missing-signature-type
缺少签名类型参数
Missing Required Arguments
isv.missing-signature-key
缺少签名配置
Missing Required Arguments
isv.missing-session
缺少SessionKey参数
Missing Required Arguments
isv.missing-app-id
缺少AppID参数
Missing Required Arguments
isv.missing-timestamp
缺少时间戳参数
Missing Required Arguments
isv.missing-version
缺少版本参数
Missing Required Arguments
isv.missing-app-uid
商户类应用需传入app_uid参数
Invalid Arguments
isv.invalid-parameter
参数无效,格式不对、非法值、越界等
Invalid Arguments
isv.upload-fail
文件上传失败
Invalid Arguments
isv.invalid-file-extension
文件扩展名无效
Invalid Arguments
isv.invalid-file-size
文件大小无效
Invalid Arguments
isv.invalid-platform
无效的平台来源
Invalid Arguments
isv.invalid-method
不存在的方法名
Invalid Arguments
isv.invalid-format
无效数据格式
Invalid Arguments
isv.invalid-signature-type
无效签名类型
Invalid Arguments
isv.invalid-signature
Invalid Arguments
isv.invalid-app-id
无效的AppID参数
Invalid Arguments
isv.invalid-timestamp
非法的时间戳参数
Invalid Arguments
isv.invalid-version
非法的版本参数
Invalid Arguments
isv.unsupported-version
不支持的版本号
Invalid Arguments
isv.invalid-encoding
Invalid Arguments
isv.invalid-charset
字符集错误
Invalid Arguments
isv.invalid-digest-type
摘要类型错误
Invalid Arguments
isv.invalid-digest
Invalid Arguments
isv.openid-error
openId转换错误
Invalid Arguments
isv.invalid-app-method
应用不包含此方法名
Invalid Arguments
isv.illegal-json
不正确的JSON格式
Invalid Arguments
isv.illegal-card-no
不正确的卡号
Invalid Arguments
isv.invalid-partnerid
userid不能对应到合法的parnter
Insufficient Conditions
isv.invalid-app-state
应用状态不满足条件
Insufficient Conditions
isv.invalid-subscribe-relations
无效的订购关系
Insufficient Conditions
isv.access-data-time-out
访问的内容已过期
Call Limited
isv.app-call-limited
应用调用次数超限,包含调用频率超限
Call Limited
isv.method-call-limited
API调用次数超限,包含调用频率超限
Insufficient Permissions
isv.insufficient-isv-permissions
ISV权限不足
Insufficient Permissions
isv.insufficient-user-permissions
用户权限不足
开发者的AppId
String(32)
支付宝分配给开发者的应用Id
String(128)
alipay.trade.precreate
参数字符编码
String(10)
请求使用的编码格式,如utf-8,gbk,gb2312等
String(10)
商户生成签名字符串所使用的签名算法类型,目前支持RSA,DSA
String(256)
商户请求参数的签名串,详见安全规范中的签名生成算法
notify_url
接口异步通知url
String(256)
支付宝服务器主动通知商户服务器里指定的页面http路径。
http://api.test.alipay.net/atinterface/receive_notify.htm
发送请求的时间,格式“yyyy-MM-dd HH:mm:ss”
接口版本号
调用的接口版本,固定为:1.0
biz_content
JSON 格式,具体包含的内容参见各个接口的业务参数描述
详见各业务接口
请参照安全规范中的签名部分
fc209d86b57b2adbebaa7d9
String(32)
业务处理结果。参照 “结果码”
结果码描述
String(256)
业务处理结果描述
订单支付成功
错误子代码
String(64)
对结果码进行原因说明, 当业务结果为 10000 时,不返回该参数。详细可参考:“错误码”
ACQ.INVALID_PARAMETER
错误子代码描述
String(256)
错误子代码描述信息。当业务结果为10000 时,不返回该参数。
应用场景实例
当收银台调用预下单请求API生成二维码展示给用户后,用户通过手机扫描二维码进行支付,支付宝会将该笔订单的变更信息,沿着商户调用预下单请求时所传入的通知地址主动推送给商户。
notify_time
通知的发送时间。
格式为yyyy-MM-dd HH:mm:ss。
notify_type
String(64)
通知的类型
trade_status_sync
通知校验ID
String(128)
通知校验ID
ac93a8b330c5ecf72da9786
String(10)
签名算法类型,目前支持RSA
String(256)
请参照安全规范中的签名部分
0e52cc63db0f44997cf70e
notify_action_type
通知动作类型
String(64)
通知动作类型:
创建:createDirectPayTradeByBuyerAction
支付:payByAccountAction
退款:refundFPAction
撤销:reverseAction
关闭:closeTradeAction
交易完成:finishFPAction
payByAccountAction
支付宝交易号
String(64)
支付宝交易凭证号
开发者的app_id
String(32)
支付宝分配给开发者的应用Id
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
out_biz_no
商户业务号
String(64)
商户业务ID,主要是退款通知中返回退款申请的流水号。
买家支付宝用户号
String(32)
买家支付宝用户号
buyer_logon_id
买家支付宝账号
String(100)
买家支付宝账号
卖家支付宝用户号
String(30)
卖家支付宝用户号。
seller_email
卖家支付宝账号
String(100)
卖家支付宝账号
trade_status
String(32)
交易目前所处的状态
TRADE_CLOSED
total_amount
Number(9,2)
本次交易支付的订单金额,单位为人民币(元)。
receipt_amount
Number(9,2)
商家在交易中实际收到的款项,单位为元
invoice_amount
Number(9,2)
用户在交易中支付的可开发票的金额
buyer_pay_amount
Number(9,2)
用户在交易中支付的金额
point_amount
积分宝金额
Number(9,2)
使用积分宝支付的金额
refund_fee
Number(9,2)
退款通知中,返回退款金额,单位为元
String(256)
商品的标题/交易标题/订单标题/订单关键字等,是请求时对应的参数,原样通知回来。
当面付交易
String(400)
该订单的备注、描述、明细等。
对应请求时的body参数,原样通知回来。
当面付交易内容
gmt_create
交易创建时间
该笔交易创建的时间。
格式为yyyy-MM-dd HH:mm:ss。
gmt_payment
交易付款时间
该笔交易的买家付款时间。
格式为yyyy-MM-dd HH:mm:ss。
gmt_refund
交易退款时间
该笔交易的退款时间。
格式为yyyy-MM-dd HH:mm:ss。
交易结束时间
该笔交易结束时间。
格式为yyyy-MM-dd HH:mm:ss。
fund_bill_list
支付金额信息
String(512)
支付成功的各个渠道金额信息详见支付渠道信息说明
[{"MCARD":"7.94"},{"POINT":"1.69"}]
通知返回数据处理
服务器异步页面特性
必须保证服务器异步通知页面(notify_url)上无任何字符,如空格、HTML标签、开发系统自带抛出的异常提示信息等;
支付宝是用POST方式发送通知信息,因此该页面中获取参数的方式,如: request.Form("out_trade_no")、$_POST['out_trade_no'];
支付宝主动发起通知,该方式才会被启用;
只有在支付宝的交易管理中存在该笔交易,且发生了交易状态的改变,支付宝才会通过该方式发起服务器通知(即时到账中交易状态为“等待买家付款”的状态默认是不会发送通知的);
服务器间的交互,不像页面跳转同步通知可以在页面上显示出来,这种交互方式是不可见的;
第一次交易状态改变(即时到账中此时交易状态是交易完成)时,不仅会返回同步处理结果,而且服务器异步通知页面也会收到支付宝发来的处理结果通知;
程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:2m,10m,10m,1h,2h,6h,15h);
程序执行完成后,该页面不能执行页面跳转。如果执行页面跳转,支付宝会收不到success字符,会被支付宝服务器判定为该页面程序运行出现异常,而重发处理结果通知;
cookies、session等在此页面会失效,即无法获取这些数据;
该方式的调试与运行必须在服务器上,即互联网上能访问;
该方式的作用主要防止订单丢失,即页面跳转同步通知没有处理订单更新,它则去处理;
当商户收到服务器异步通知并打印出success时,服务器异步通知参数notify_id才会失效。也就是说在支付宝发送同一条异步通知时(包含商户并未成功打印出success导致支付宝重发数次通知),服务器异步通知参数notify_id是不变的。
验证是否支付宝请求
验证此次通知信息是否是支付宝服务器发来的信息,以帮助校验反馈回来的数据的真假性。
获取支付宝返回数据之一的通知校验ID(notify_id),按照支付宝要求的格式拼接成要请求的链接,如:
/gateway.do?service=notify_verify&partner=2354&notify_id=RqPnCoPT3K9%252Fvwbh3I%252BFioE227%252BPfNMl8jwyZqMIiXQWxhOCmQ5MQO%252FWd93rvCB%252BaiGg
通过访问这个请求链接,利用编程方法来模拟http请求与支付宝服务器进行交互,获得支付宝服务器上处理的结果。
如果获得的信息是true,则校验成功;如果获得的信息是其他,则校验失败。
异步返回结果的验签
异步通知的验签方式和同步返回略有不同。以一个具体异步通知的返回为例:
http://api.test.alipay.net/atinterface/receive_notify.htm?gmt_payment= 22:33:59&notify_id=42af7baacd1d52b91edcj34&seller_email=&notify_type=trade_status_sync&sign=kPbQIjX+xQc8F0/A6/AocELIjhhZnGbcBN6G4MM/HmfWL4ZiHM6fWl5NQhzXJusaklZ1LFuMo+lHQUELAYeugH8LYFvxnNajOvZhuxNFbN2LhF0l/KL8ANtj8oyPM4NN7Qft2kWJTDJUpQOzCzNnV9hDxh5AaT9FPqRS6ZKxnzM=&trade_no=9373&out_trade_no=21repl2ac2eOutTradeNo322&gmt_create= 22:33:46&seller_id=6673&notify_time= 22:34:03&subject=FACE_TO_FACE_PAYMENT_PRECREATE中文&trade_status=TRADE_SUCCESS&sign_type=RSA
验签步骤:
在通知返回参数列表中,除去sign、sign_type两个参数外,凡是通知返回回来的参数皆是待验签的参数。
将剩下参数进行url_decode, 然后进行字典排序,组成字符串,得到待签名字符串:
gmt_create= 22:33:46&gmt_payment= 22:33:59&notify_id=42af7baacd1d52b91edcj34&notify_time= 22:34:03&notify_type=trade_status_sync&out_trade_no=21repl2ac2eOutTradeNo322&seller_email=&seller_id=6673&subject=FACE_TO_FACE_PAYMENT_PRECREATE中文&trade_no=9373&trade_status=TRADE_SUCCESS
将签名参数(sign)使用base64解码为字节码串
使用RSA的验签方法,通过签名字符串、签名参数(经过base64解码)及支付宝公钥验证签名。
商户业务处理注意事项
商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。在支付宝的业务通知中,只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。如果商户未正确处理业务通知,存在潜在的风险,商户自行承担因此而产生的所有损失。
1.状态TRADE_SUCCESS的通知触发条件是商户签约的产品支持退款功能的前提下,买家付款成功;
2.交易状态TRADE_FINISHED的通知触发条件是商户签约的产品不支持退款功能的前提下,买家付款成功;或者,商户签约的产品支持退款功能的前提下,交易已经成功并且已经超过可退款期限。
支付渠道信息说明
支付渠道代码
支付宝红包
ALIPAYACCOUNT
支付宝余额
商户店铺卡
商户优惠券
应用场景实例
收银员通过本接口将订单信息上送至支付宝后,将支付宝返回的二维码信息展示给用户,由用户扫描二维码完成订单支付。
API调用说明
alipay.trade.precreate
返回结果格式
以下表格列出的内容需要组装成 json 格式,放入到公共请求参数 biz_content 中, 详见
out_trade_no
商户订单号
String(64)
商户订单号,64个字符以内、只能包含字母、数字、下划线;需保证在商户端不重复。
卖家支付宝用户
String(28)
如果该值为空,则默认为商户签约账号对应的支付宝用户 ID
total_amount
订单总金额
订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,], 如果同时传入了【打折金额】,【不可打折金额】,【订单总 金额】三者,则必须满足如下条件:【订单总金额】=【打折 金额】+【不可打折金额】
discountable_amount
可打折金额
参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,]如果该值未传入,但传入了【订 单总金额】,【不可打折金额】 则该值默认为【订单总金额】- 【不可打折金额】
undiscountable_amount
不可打折金额
不参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,]如果该值未传入,但传入了【订 单总金额】,【打折金额】,则该值默认为【订单总金额】- 【打折金额】
String(256)
Iphone6 16G
String(128)
对交易或商品的描述
Iphone6 16G
goods_detail
商品明细列表
订单包含的商品列表信息, Json 格式,其它说明详见:“商品明细说明”
[{"goods_id": "apple-01","goods_name":"ipad","goods_category":"7788230","price":" 2000.00","quantity":"1"}]
operator_id
商户操作员编号
String(28)
商户的操作员编号
商户门店编号
String(32)
商户门店编号
terminal_id
机具终端编号
String(32)
商户机具终端编号
extend_params
String(512)
业务扩展参数
{“sys_service _provider_id”: ” 7846”}
time_expire
支付超时时间
该笔订单允许的最晚付款时间,逾期将关闭交易。格式为: yyyy-MM-dd HH:mm:ss
method=alipay.trade.precreate,
app_id=7148,
charset=utf-8,
sign_type=RSA,
sign=MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL4HgSt9hfOpv9MSwgUvfpgOH7WkC7WrTr84m29b0VfnZtK+9jv/YPXYr+22DrxfWJkdPiXJvSjifxPudlqjX21l6/8k79i/4HRCz8DBcdw5jqROfpoq0l3vYfPVqJGwSqaPhtM1Bb4hAD2yLlN2ukfCbshSntUEFd4ozocLolW/AgMBAAECgYBVHTNj8WMQElYTCnHQtMc1AA5/4yxDgKlSyN4F8NBBWSoa9uF/WhFpzFZwWH0dLm+WlRyC/Gs3ZsuYd9SXIFna9mv49+cEfObSzJhvW5DXOVCi+c4Ap3cTsXZiAj8DMsoCb9OjRHNl/BqzN0kl0Wm1diZvXl9YgSRqbzpXzoj4oQJBAOYLSk87XFYodvwr4aL3KFjZZZhHj1Jpp/q61SNgB03aXqZu9m+hk1X4mTGn4rhA7Cl2ZuL+OoxxnJFDw0cbMRcCQQDTeGgx0VUC+O3zAtzMmocjE7WuesRC3IjhU30of4GGjQzIXvKOQCCuUF2DHvIkrB/k2E75n8+TI9matbLS11mZAkEAtSek7/oF/89Dy9dei2/o9PbVu3J22eZcIuVoHMBtYBCbwqLVLBloJiZrtR/JOWHe19Pmt9COGLULH5XmPKOcJwJAUZnP0xFs1XXLFA/Rtd4XMXDklYxn+UjyRMibrintiEcbXKJOxJd4ROtb+kHRvFbzA7J4XxjM14Fo8asVcwiIWQJAVco+9qQzZ7JZzFzk0KTWhQlfbcRByLX25XIPbIes2lmY2uM895yrY/8kbGx2JgD/VGITWwth+uuutXUQ9K6HIw==,
timestamp= 03:07:50,
biz_content={
"out_trade_no": "",
"total_amount": "88.88",
"discount_amount":"8.88",
"unDiscount_amount": "80",
"subject": "当面付二维码支付",
"goods_detail": [
"goods_id": "apple-01",
"goods_name": "ipad",
"goods_category": "7788230",
"price": "88.88",
"quantity": "1"
"operator_id": "op001",
"store_id": "pudong001",
"terminal_id": "t_001",
"time_expire": "01"
当结果码(code)为 40004 时,只返回公共返回参数中的信息。
当结果码(code)为 10000 时,除公共返回参数外,还将以 JSON 格式返回如
下列表中的值:
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
二维码码串
本次请求生成的二维码码串,可以用二维码生成工具根据该码串值生成对应的二维码
/bavh4wjlxf12tper3a
成功请求示例:
"alipay_trade_precreate_response": {
"code": "10000",
"msg": "处理成功",
"out_trade_no": "8248",
"qr_code": "/bavh4wjlxf12tper3a"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
失败请求示例:
"alipay_trade_precreate_response": {
"code": "40004",
"msg": "处理失败",
"sub_code": "ACQ.TRADE_BUYER_NOT_MATCH",
"sub_msg": "交易买家不匹配"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GGdWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
ACQ.SYSTEM_ERROR
接口返回错误
请立即调用查询订单 API,查询当前订单的状态,并根据订单状态决定下一步的操作
ACQ.INVALID_PARAMETER
请求参数未按指引进行
检查请求参数,修改后重新发起请求
ACQ.ACCESS_FORBIDDEN
无权限使用接口
未签约条码支付或者合
联系支付宝小二签约条码支
ACQ.EXIST_FORBIDDEN_ WORD
订单信息中包含违禁词
订单信息中(标题,商品名称,描述等)包含了违禁词
修改订单信息后,重新发起请求
ACQ.PARTNER_ERROR
应用 APP_ID 填写错误
应用 APP_ID 填写错误或者对应的 APP_ID 状态无效
联系支付宝小二,确认 APP_ID 的状态
ACQ.TOTAL_FEE_EXCEED
订单总金额超过限额
输入的订单总金额超过
修改订单金额再发起请求
ACQ.CONTEXT_INCONSISTENT
交易信息被篡改
该笔交易已存在,但是
交易信息匹配不上
更换商家订单号后,重新发起请求
ACQ.TRADE_HAS_SUCCESS
交易已被支付
该笔交易已存在,并且
已经支付成功
确认该笔交易信息是否为当前买家的,如果是则认为交易付款成功,如果不是则更换商家订单号后,重新发起请求
ACQ.TRADE_HAS_CLOSE
交易已经关闭
该笔交易已存在,并且
该交易已经关闭
更换商家订单号后,重新发起请求
ACQ.BUYER_SELLER_EQUAL
买卖家不能相同
交易的买卖家为同一个人
更换买家重新付款
ACQ.TRADE_BUYER_NOT_MATCH
交易买家不匹配
该笔交易已存在,但是交易不属于当前付款的买家
更换商家订单号后,重新发起请求
ACQ.BUYER_ENABLE_STATUS_FORBID
买家状态非法
买家的状态不合法,不能进行交易
用户联系支付宝小二,确认买家状态为什么非法
ACQ.BUYER_PAYMENT_AMOUNT_DAY_LIMIT_ERROR
买家付款日限额超限
当前买家(用户)当日支付宝付款额度已用完
更换买家进行支付
ACQ.BEYOND_PAY_RESTRICTION
商户收款额度超限
商户收款额度超限
联系支付宝小二提高限额
ACQ.BEYOND_PER_RECEIPT_RESTRICTION
商户收款金额超过月限额
商户收款金额超过月限额
联系支付宝小二提高限额
ACQ.BUYER_PAYMENT_AMOUNT_MONTH_LIMIT_ERROR
买家付款月额度超限
买家本月付款额度已超限
让买家更换账号后,重新付款或者更换其它付款方式
ACQ.SELLER_BEEN_BLOCKED
商家账号被冻结
商家账号被冻结
联系支付宝小二,解冻账号
ACQ.ERROR_BUYER_CERTIFY_LEVEL_LIMIT
买家未通过人行认证
当前买家(用户)未通
过人行认证
让用户联系支付宝小二并更
换其它付款方式
商品明细说明
商品的编号
alipay_goods_id
支付宝统一的商品编号
支付宝定义的统一商品编号
goods_name
商品单价,单位为元。
goods_category
商品描述信息
扩展信息说明
sys_service_provider_id
系统商编号
系统商的编号。
资金明细信息说明
fund_channel
支付渠道,参见“支付渠道说明”。
使用指定支付渠道支付的金额,单位为元
支付渠道说明
支付渠道代码
支付宝红包
ALIPAYACCOUNT
支付宝余额
商户店铺卡
商户优惠券
应用场景实例
本接口提供支付宝支付订单的查询的功能,商户可以通过本接口主动查询订单状态,完成下一步的业务逻辑。
需要调用查询接口的情况:
当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
调用扫码支付支付接口后,返回系统错误或未知交易状态情况
调用扫码支付请求后,如果结果返回处理中(返回结果中的code等于10003)的状态;
调用撤销接口API之前,需确认该笔交易目前支付状态;
API调用说明
alipay.trade.query
返回结果格式
以下表格列出的内容需要组装成 json 格式,放入到公共请求参数 biz_content 中,详见
支付宝交易号
String(64)
支付宝交易号,和商户订单号不能同时为空
out_trade_no
商户订单号
String(64)
订单支付时传入的商户订单号。trade_no,out_trade_no 如果同时存在优先取 trade_no
method=alipay.trade.query,
app_id=7148,
charset=utf-8,
sign_type=RSA,
sign= MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL4HgSt9hfOpv9MSwgUvfpgOH7WkC7WrT r84m29b0VfnZtK+9jv/YPXYr+22DrxfWJkdPiXJvSjifxPudlqjX21l6/8k79i/4HRCz8DBcdw5jqROfpoq0l3vYfPVqJG wSqaPhtM1Bb4hAD2yLlN2ukfCbshSntUEFd4ozocLolW/AgMBAAECgYBVHTNj8WMQElYTCnHQtMc1AA5/4yx DgKlSyN4F8NBBWSoa9uF/WhFpzFZwWH0dLm+WlRyC/Gs3ZsuYd9SXIFna9mv49+cEfObSzJhvW5DXOVCi+c4 Ap3cTsXZiAj8DMsoCb9OjRHNl/BqzN0kl0Wm1diZvXl9YgSRqbzpXzoj4oQJBAOYLSk87XFYodvwr4aL3KFjZZZ hHj1Jpp/q61SNgB03aXqZu9m+hk1X4mTGn4rhA7Cl2ZuL+OoxxnJFDw0cbMRcCQQDTeGgx0VUC+O3zAtzMmoc jE7WuesRC3IjhU30of4GGjQzIXvKOQCCuUF2DHvIkrB/k2E75n8+TI9matbLS11mZAkEAtSek7/oF/89Dy9dei2/o9P bVu3J22eZcIuVoHMBtYBCbwqLVLBloJiZrtR/JOWHe19Pmt9COGLULH5XmPKOcJwJAUZnP0xFs1XXLFA/Rtd4 XMXDklYxn+UjyRMibrintiEcbXKJOxJd4ROtb+kHRvFbzA7J4XxjM14Fo8asVcwiIWQJA Vco+9qQzZ7JZzFzk0KT WhQlfbcRByLX25XIPbIes2lmY2uM895yrY/8kbGx2JgD/VGITWwth+uuutXUQ9K6HIw== ",
timestamp= 03:07:50,
biz_content={
"out_trade_no": ""
当结果码(code)为40004时,只返回公共返回参数中的信息。
当结果码(code)为10000时,除公共返回参数外,还将以JSON格式返
回如下列表中的值:
支付宝交易号
String(64)
支付宝交易凭证号
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
买家支付宝用户号
String(32)
买家支付宝用户号
buyer_logon_id
买家支付宝账号
String(100)
买家支付宝账号,将用*号屏蔽部分内容
159****5620
trade_status
String(32)
交易目前所处的状态
TRADE_CLOSED
total_amount
本次交易支付的订单金额,单位为人民币(元)。
receipt_amount
Number(9,2)
商家在交易中实际收到的款项,单位为元。
invoice_amount
Number(9,2)
用户在交易中支付的可开具发票的金额
buyer_pay_amount
Number(9,2)
用户在交易中支付的金额
point_amount
积分宝金额
Number(9,2)
使用积分宝支付的金额
send_pay_date
本次交易打款给卖家的时间
本次交易打款到卖家账户的时间,格式为 yyyy-MM-dd HH:mm:ss。
terminal_id
商户机具终端编号
String(32)
商户机具终端编号
alipay_store_id
支付宝店铺编号
String(32)
支付宝商家店铺编号
商户门店编号
String(32)
商户门店编号
fund_bill_list
资金单据信息的集合
本次交易使用的资金明细信息列表,包含多个渠道信息子节点 json 格式。该节点包含的参数请参见“资金明细信息说明”
详见资金明细信息说明
请求成功示例:
"alipay_trade_query_response": {
"code": "10000",
"msg": "处理成功",
"trade_no": "1536",
"out_trade_no": "8248",
"trade_status": "TRADE_SUCCESS",
"open_id": "4333",
"buyer_logon_id": "159****5620",
"total_amount": "88.88",
"receipt_amount": "8.88",
"send_pay_date": " 15:45:57",
"store_id":"NJ_S_001",
"terminal_id":"NJ_T_001",
"fund_bill_list": [
"fund_channel": "ALIPAYACCOUNT",
"amount": "80.00"
"fund_channel": "DISCOUNT",
"amount": "8.88"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuy
Int6V+wn+6IP9AmwRTKi+GG dWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6C
fdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
请求成功,但查询的交易未付款的示例:
"alipay_trade_query_response": {
"code": "10000",
"msg": "处理成功",
"trade_no": "1536",
"out_trade_no": "8248",
"trade_status": "WAIT_BUYER_PAY",
"open_id": "4333",
"buyer_logon_id": "159****5620",
"total_amount": "88.88",
"store_id":"NJ_S_001",
"terminal_id":"NJ_T_001",
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GG dWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
请求失败示例:
"alipay_trade_query_response": {
"code": "40004",
"msg": "处理失败",
"sub_code": "ACQ.TRADE_NOT_EXIST",
"sub_msg": "交易不存在"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GG dWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
ACQ.SYSTEM_ERROR
重新发起请求
ACQ.INVALID_PARAMETER
请求参数未按指引进
检查请求参数,修改后重
新发起请求
ACQ.TRADE_NOT_EXIST
交易不存在
传入的条件未查询到
检查请求参数,修改后重
新发起请求
资金明细信息说明
是否可为空
fund_channel
支付渠道,参见“支付渠道说明”。
使用指定支付渠道支付的金额,单位为元。
交易状态说明
WAIT_BUYER_PAY
交易创建,等待买家付款
TRADE_CLOSED
未付款交易超时关闭
支付完成后全额退款
TRADE_SUCCESS
交易支付成功
TRADE_FINISHED
交易结束,不可退款
支付渠道说明
支付渠道代码
支付宝红包
ALIPAYACCOUNT
支付宝余额
商户店铺卡
商户优惠券
应用场景实例
调用支付宝支付接口时未返回明确的返回结果(如由于系统错误或网络异常导
致无返回结果),可使用本接口将交易进行撤销。
如果用户支付失败,支付宝会将此订单关闭;如果用户支付成功,支付宝会将
支付的资金退还给用户。
只有发生支付系统超时或者支付结果未知时可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款 API。提交支付交易后调用【查询订单 API】,没有明确的支付结果再调用【撤销订单 API】。
API调用说明
alipay.trade.cancel
返回结果格式
以下表格列出的内容需要组装成 json 格式,放入到公共请求参数biz_content 中,详见
out_trade_ no
商户订单号
String(64)
原支付请求的商户订单号
method=alipay.trade.cancel,
app_id=7148,
charset=utf-8,
sign_type=RSA,
sign= MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL4HgSt9hfOpv9MSwgUvfpgOH7WkC7WrT r84m29b0VfnZtK+9jv/YPXYr+22DrxfWJkdPiXJvSjifxPudlqjX21l6/8k79i/4HRCz8DBcdw5jqROfpoq0l3vYfPVqJG wSqaPhtM1Bb4hAD2yLlN2ukfCbshSntUEFd4ozocLolW/AgMBAAECgYBVHTNj8WMQElYTCnHQtMc1AA5/4yx DgKlSyN4F8NBBWSoa9uF/WhFpzFZwWH0dLm+WlRyC/Gs3ZsuYd9SXIFna9mv49+cEfObSzJhvW5DXOVCi+c4 Ap3cTsXZiAj8DMsoCb9OjRHNl/BqzN0kl0Wm1diZvXl9YgSRqbzpXzoj4oQJBAOYLSk87XFYodvwr4aL3KFjZZZ hHj1Jpp/q61SNgB03aXqZu9m+hk1X4mTGn4rhA7Cl2ZuL+OoxxnJFDw0cbMRcCQQDTeGgx0VUC+O3zAtzMmoc jE7WuesRC3IjhU30of4GGjQzIXvKOQCCuUF2DHvIkrB/k2E75n8+TI9matbLS11mZAkEAtSek7/oF/89Dy9dei2/o9P bVu3J22eZcIuVoHMBtYBCbwqLVLBloJiZrtR/JOWHe19Pmt9COGLULH5XmPKOcJwJAUZnP0xFs1XXLFA/Rtd4 XMXDklYxn+UjyRMibrintiEcbXKJOxJd4ROtb+kHRvFbzA7J4XxjM14Fo8asVcwiIWQJA Vco+9qQzZ7JZzFzk0KT WhQlfbcRByLX25XIPbIes2lmY2uM895yrY/8kbGx2JgD/VGITWwth+uuutXUQ9K6HIw== ,
timestamp= 03:07:50,
biz_content={
"out_trade_no": ""
当结果码(code)为40004时,除公共返回参数外,还将以JSON格式返回如下列表中的值:
retry_flag
是否可重试标志
对撤销失败的情况下,是否可以继续发起撤销请求的建议。
Y:可继续发起撤销请求;
N:不可继续发起撤销请求,即后续的撤销请求也不会成功。
当结果码(code)为10000时,除公共返回参数外,还将以JSON格式返回如下列表中的值。
支付宝交易号
String(64)
支付宝交易凭证号
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
retry_flag
是否可重试标志
撤销已成功,无需重试
撤销执行的动作
String(10)
撤销执行的动作。
close:直接撤销,无退款;
refund:撤销,有退款。
请求成功示例:
"alipay_trade_cancel_response": {
"code": "10000",
"msg": "处理成功",
"trade_no": "1536",
"out_trade_no": "8248",
"retry_flag": "N",
"action": "close"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GG dWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
请求失败示例:
"alipay_trade_cancel_response": {
"code": "40004",
"msg": "处理失败",
"sub_code": "ACQ.INVALID_PARAMETER",
"sub_msg": "参数无效",
"retry_flag": "N"
"jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GG dWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
AQC.SYSTEM_ERROR
请使用相同的参数再次调用
ACQ.INVALID_PARAMETER
请求参数未按指引填写
请求参数有错,重新检查请
求后,再调用撤销
ACQ.SELLER_BALANCE_NOT_ENOUGH
卖家余额不足
商户的支付宝账户中无
足够的资金进行撤销
商户支付宝账户充值后重新
发起撤销即可
ACQ.REASON_TRADE _BEEN_FREEZEN
交易被冻结
当前交易被冻结,不允许进行撤销
联系支付宝小二,确认该笔交易的具体情况
应用场景实例
当交易发生之后一段时间内,由于买家或者卖家的原因需退款,卖家可通过退
款接口将支付款退还给买家,支付宝将在收到退款请求并验证成功后,按退款规则
将支付款按原路退到买家帐号上。
交易超过可退款时间(签约时设置的可退款时间)的订单无法进行退款。
支付宝退款支持单笔交易分多次退款,多次退款需要提交支付宝交易号并
设置不同的退款单号;总退款金额不能超过用户实际支付金额。
分多笔退款时,若一笔退款失败需重新提交,要采用原来的退款单号。
API调用说明
alipay.trade.refund
返回结果格式
以下表格列出的内容需要组装成 json 格式,放入到公共请求参数 biz_content 中,详见
支付宝交易号
String(64)
支付宝交易凭证号
refund_amount
需要退款的金额,该金额不能 大于订单金额,单位为元,支持两位小数
out_request_no
商户退款请求号
String(64)
标识一次退款请求,同一笔交
易多次退款需要保证唯一
refund_reason
String(128)
退款的原因说明
商户的门店编号
String(32)
商户的门店编号
alipay_store_id
支付宝店铺编号
String(32)
支付宝的商家店铺编号
terminal_id
商户的终端编号
String(32)
商户的终端编号
method=alipay.trade.refund,
app_id=7148,
charset=utf-8,
sign_type=RSA,
sign=85bf83f78d5cefb804bd8e,
timestamp= 03:07:50,
biz_content={
"trade_no": "6707",
"refund_amount": "77.77",
"out_request_no": "HZ01RF001",
"refund_reason": "O2O 当面付退款",
"store_id": "ST_001",
"terminal_id": "T_001"
当结果码(code)为40004时,只返回公共返回参数中的信息。
当结果码(code)为10000时,除公共返回参数外,还将以JSON格式返
回如下列表中的值:
支付宝交易号
String(64)
支付宝交易凭证号
out_trade_no
商户订单号
String(64)
原支付请求的商户订单号
买家支付宝用户号
String(32)
买家支付宝用户号
buyer_logon_id
买家支付宝账号
String(100)
买家支付宝账号,将用*号屏蔽部分内容
159****5620
fund_change
本次退款请求是
否发生资金变动
对同一笔退款请求(商户退款请求单号相同),如果已退款成功,将直接返回上一次的退款结果,本字段标识本次退款请求是否发生了资金变动:
Y:发生资金变动;N:未发送资金变动。
refund_fee
累计退款金额
实际退款金额,单位为元,两位小数。
gmt_refund_pay
退款时间,格式为 yyyy-MM-dd HH:mm:ss。
refund_detail_item_list
退款资金明细信息集合
本次交易退款的资金明细信息列表,包含多个渠道信息子节点 ,json格式。该节点包含 的参数请参见“资金明细信息说明”
参见资金明细信息说明
请求成功示例:
"alipay_trade_refund_response": {
"code": "10000",
"msg": "处理成功",
"trade_no": "1536",
"out_trade_no": "8248",
"open_id": "4333",
"buyer_logon_id": "159****5620",
"fund_change": "Y",
"refund_fee": "77.77",
"gmt_refund_pay": " 15:45:57"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GG dWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
请求失败示例:
"alipay_trade_refund_response": {
"code": "40004",
"msg": "处理失败",
"sub_code": "ACQ.REASON_TRADE_BEEN_FREEZEN",
"sub_msg": "请求退款的交易被冻结"
"sign": "jfAz0Yi0OUvAPqYTzA0DLysx0ri++yf7o/lkHOHaG1Zy2fHBf3j4WM+sJWHZUuyInt6V+wn+6IP9AmwRTKi+GG dWjPrsfBjXqR7H5aBnLhMsAltV7v4cYjhuguAqh4WkaJO6v6CfdybDpzHlxE6Thoucnad+OsjdCXkNd1g3UuU="
ACQ.SYSTEM_ERROR
请使用相同的参数再次调用
ACQ.INVALID_PARAMETER
请求参数未按指引填写
请求参数有错,重新检查请求后,再调用退款
ACQ.SELLER_BALANCE_NOT_ENOUGH
卖家余额不足
商户的支付宝账户中无足够的资金进行退款
商户支付宝账户充值后重新发起退款即可
ACQ.REFUND_AMT_NOT_EQUAL_TOTAL
退款金额超限
全额退款时输入的退
款金额与订单金额不
检查退款金额是否正确,重新
修改请求后,重新发起退款
ACQ.REASON_TRADE_BEEN_FREEZEN
请求退款的交易被冻结
当前交易被冻结,不
允许进行退款
联系支付宝小二,确认该笔交
易的具体情况
ACQ.TRADE_NOT_EXIST
交易不存在
当前要退款的交易不存在
检查请求中的交易号和商户订
单号是否正确,确认后重新发
ACQ.TRADE_HAS_FINISHED
交易已完结
当前交易已完结,不
该交易已完结,不允许进行退
款,确认请求的退款的交易信
息是否正确
ACQ.TRADE_STATUS_ERROR
交易状态非法
当前交易状态不允许退款
查询交易,确认交易是否已经付款
ACQ.DISCORDANT_REPEAT_REQUEST
不一致的请求
重复的商户退款号但
是请求的信息与之前
的信息不一致
检查该退款号是否已退过款或
更换退款款重新发起请求
ACQ.REASON_TRADE_REFUND_FEE_ERR
退款金额无效
输入的退款金额超过
了该笔订单的可退金
检查退款请求的金额是否正确
业务处理成功
业务处理失败
预下单请求API
商户需上传唯一的商户订单号(out_trade_no),同时建议商户订单号中包含年月日等时间信息;
传递商品明细列表;
上传“terminal_id(机具终端编号)、store_id(商户门店编号)、seller_id(卖家支付宝用户ID)”信息;
注:若机具商接入,terminal_id(机具终端编号)必填,其余选填。若系统商接入,store_id(商户的门店编号)必填,其余选填。
返回值 fund_bill_list 中的支付宝渠道字段的解析不能硬编码,后续该字段会逐步增加。
设置支付超时时间(time_expire),即晚于该订单的最晚付款时间后,将关闭交易。建议两小时
如果是支付宝有返佣协议的合作商户,需要传入extend_params参数,并且在参数中传入sys_service _provider_id,值为系统商签约账户的partnerId。
通过收银系统或机具屏幕上展示出二维码的情况下,系统调用查询接口进入轮询查询,建议频率5s/次,轮询3分钟。3分钟未查询到支付成功,调用撤销API作废该二维码。
通过纸质方式打印出二维码的情况下,通过收银员手动调用的方式调用查询接口获得订单状态
撤销有时间限制(一天内)
需要关注返回结果中的重试标志,重试频率及次数参见文档
对于无效二维码需要调用撤销接口,作废二维码。
支付宝退款支持单笔交易分多次退款,多次退款需要提交支付宝交易号并设置不同的退款单号;总退款金额不能超过用户实际支付金额。
分多笔退款时,若一笔退款失败需重新提交,要采用原来的退款单号。
小票包含店铺 ID、收银员 ID、支付宝交易号、付款账户(脱敏)、订单总金额、 优惠金额等信息。
平台和语言
扫码支付API对应的SDK下载
Java-JDK 1.5
Java-JDK 1.4
扫码支付API对应的DEMO
1.通过预下单接口生成的二维码多长时间有效?
有效时间是两小时。
2.二维码能否重复扫?
二维码被扫过一次后,订单即会创建,不能再次被扫。
OpenSSL工具安装
1.Linux用户(以Ubuntu为例)
sudo apt-get install openssl
2.Windows用户开发者可以在OpenSSL官方网站下载Windows的OpenSSL安装包进行安装。
RSA私钥及公钥生成
1.Linux用户(以Ubuntu为例)
进入OpenSSL程序
OpenSSL> genrsa -out rsa_private_key.pem 1024
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
Java开发者需要将私钥转换成PKCS8格式
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
OpenSSL> exit
# 退出OpenSSL程序
2.Windows用户在cmd窗口中进行以下操作:
C:\Users\Hammer>cd C:\OpenSSL-Win32\bin
进入OpenSSL安装目录
C:\OpenSSL-Win32\bin>openssl.exe
进入OpenSSL程序
OpenSSL> genrsa -out rsa_private_key.pem 1024
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
Java开发者需要将私钥转换成PKCS8格式
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
OpenSSL> exit
# 退出OpenSSL程序
对于使用Java的开发者,将pkcs8在console中输出的私钥去除头尾、换行和空格,作为开发者私钥,对于.NET和PHP的开发者来说,无需进行pkcs8命令行操作。
私钥及公钥文件示例
经过以上步骤,开发者可以在当前文件夹中(Windows用户在C:\OpenSSL-Win32\bin)看到rsaprivatekey.pem和rsapublickey.pem两个文件,前者为私钥,后者为公钥。开发者将私钥保留,将公钥提交给支付宝网关,用于信息加密及解密。以下为使用OpenSSL生成的私钥文件和公钥文件示例:
1.标准的私钥文件示例(PHP、.NET使用)
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC+L0rfjLl3neHleNMOsYTW8r0QXZ5RVb2p/vvY3fJNNugvJ7lo
4+fdBz+LN4mDxTz4MTOhi5e2yeAqx+v3nKpNmPzC5LmDjhHZURhwbqFtIpZD51mO
fno2c3MDwlrsVi6mTypbNu4uaQzw/TOpwufSLWF7k6p2pLoVmmqJzQiD0QIDAQAB
AoGAakB1risquv9D4zX7hCv9MTFwGyKSfpJOYhkIjwKAik7wrNeeqFEbisqv35Fp
jGq3Q1oJpGkem4pxaLVEyZOHONefZ9MGVChT/MNH5b0FJYWl392RZy8KCdq376Vt
4gKVlABvaV1DkapL+nLh7LMo/bENudARsxD55IGObMU19lkCQQDwHmzWPMHfc3kd
Y6AqiLrOss+MVIAhQqZOHhDe0aW2gZtwiWeYK1wB/fRxJ5esk1sScOWgzvCN/oGJ
LhU3kipHAkEAysNoSdG2oWADxlIt4W9kUiiiqNgimHGMHPwp4JMxupHMTm7D9XtG
UIiDijZxunHv3kvktNfWj3Yji0661zHVJwJBAM8TDf077F4NsVc9AXVs8N0sq3xz
qwQD/HPFzfq6hdR8tVY5yRMb4X7+SX4EDPORKKsgnYcur5lk8MUi7r072iUCQQC8
xQvUne+fcdpRyrR4StJlQvucogwjTKMbYRBDygXkIlTJOIorgudFlrKP/HwJDoY4
uQNl8gQJb/1LdrKwIe7FAkBl0TNtfodGrDXBHwBgtN/t3pyi+sz7OpJdUklKE7zM
SBuLd1E3O4JMzvWP9wEE7JDb+brjgK4/cxxUHUTkk592
-----END RSA PRIVATE KEY-----
2.PKCS8处理后的私钥文件示例(Java使用)
-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0yqPkLXlnhM+2H
/57aHsYHaHXazr9pFQun907TMvmbR04wHChVsKVgGUF1hC0FN9hfeYT5v2SXg1WJ
Sg2tSgk7F29SpsF0I36oSLCIszxdu7ClO7c22mxEVuCjmYpJdqb6XweAZzv4Is66
1jXP4PdrCTHRdVTU5zR9xUByiLSVAgMBAAECgYEAhznORRonHylm9oKaygEsqQGk
YdBXbnsOS6busLi6xA+iovEUdbAVIrTCG9t854z2HAgaISoRUKyztJoOtJfI1wJa
QU+XL+U3JIh4jmNx/k5UzJijfvfpT7Cv3ueMtqyAGBJrkLvXjiS7O5ylaCGuB0Qz
711bWGkRrVoosPM3N6ECQQD8hVQUgnHEVHZYtvFqfcoq2g/onPbSqyjdrRu35a7P
vgDAZx69Mr/XggGNTgT3jJn7+2XmiGkHM1fd1Ob/3uAdAkEA4D7aE3ZgXG/PQqlm
3VbE/+4MvNl8xhjqOkByBOY2ZFfWKhlRziLEPSSAh16xEJ79WgY9iti+guLRAMra
vGrs2QJBAOmKWYeaWKNNxiIoF7/4VDgrcpkcSf3uRB44UjFSn8kLnWBUPo6WV+x1
FQBdjqRviZ4NFGIP+KqrJnFHzNgJhVUCQFzCAukMDV4PLfeQJSmna8PFz2UKva8f
vTutTryyEYu+PauaX5laDjyQbc4RIEMU0Q29CRX3BA8WDYg7YPGRdTkCQQCG+pjU
2FB17ZLuKRlKEdtXNV6zQFTmFc1TKhlsDTtCkWs/xwkoCfZKstuV3Uc5J4BNJDkQ
OGm38pDRPcUDUh2/
-----END PRIVATE KEY-----
3.公钥文件示例
-----BEGIN PRIVATE KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxL
DkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unorm
YQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/Q
pkddCVXnZ4bAUaQjXQIDAQAB
-----END PRIVATE KEY-----
appstore-60-33 & 0ae82_0

我要回帖

更多关于 alipayrsapublickey 的文章

 

随机推荐