原文:https://fuwu.alipay.com/platform/doc.htm#c11

一、概述

开发者生成私钥、公钥之后,将公钥提交给服务窗平台,同时下载支付宝的公钥,使用OpenSSL的方式验证签名之后便可完成接入。

开发者使用接口之前需要激活开发者模式,请打开服务窗平台开发者模式,点击下方的“激活开发者模式”按钮。

建议开发者使用支付宝提供的SDK进行服务窗开发,使用SDK进行开发有以下优点:

  1. SDK会随着新接口的发布而同步更新
  2. SDK会随着老接口的更新而同步更新
  3. SDK让底层逻辑变得透明和简单,开发者只需关注于自身的业务逻辑
  4. SDK集成了编码、签名等常用方法,开发者无需额外耗费时间
  5. 提供了基于SDK开发的Demo,开发者上手更容易

SDK下载:

  1. Java-JDK 1.5 SDK
  2. Java-JDK 1.4 SDK
  3. PHP SDK
  4. .NET2010 SDK

Demo下载:

  1. Java-JDK 1.5 Demo
  2. Java-JDK 1.4 Demo
  3. PHP Demo
  4. .NET2010 Demo
  5. 服务窗消息Demo
  6. 标签组发接口Demo

二、填写开发者网关及开发者公钥

开发者将网关地址填入开发者网关一栏。

开发者将公钥文件去除头尾、换行和空格后的字符串填入开发者公钥一栏。

转换前pem文件格式:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxL
DkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unorm
YQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/Q
pkddCVXnZ4bAUaQjXQIDAQAB
-----END PUBLIC KEY-----
转换后的字符串:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB

如下图所示:

三、下载支付宝公钥

点击“复制公钥”按钮,可以获取支付宝公钥,支付宝公钥是经过格式化之后的字符串,如果开发者需要使用pem文件进行验签,请点此下载pem公钥文件。

支付宝公钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB
PEM格式化后的支付宝公钥:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkr
IvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsra
prwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUr
CmZYI/FCEa3/cNMW0QIDAQAB
-----END PUBLIC KEY-----

四、使用支付宝公钥进行验签

当开发者完成网关代码的部署之后,便可以点击“提交”按钮,激活开发者模式,接入服务窗平台。

此时,支付宝网关会向开发者网关发送一条验证消息,以POST方式请求,以下为一个请求示例:

REQUEST URL: https://example.com/gateway.do
REQUEST METHOD: POST
CONTENT:service=alipay.service.checksign=ntjOmXFGJMdfdMnrTL5rEp9QG8d0lDEoGg3ZHvqemHeI8BlQoEsFbhEn0IfQT+pvfJz5RCuE+3Qh1X7I4z5iTIiGjDBstc0xeuiAmtP9TrJZuw2jUAODFB9qOwBJLNcWlKHUGTU/db/qRsJQCj8EjoJvSi9MRM/xKv/XmduS/C4=sign_type=RSAcharset=GBKbiz_content=<?xml version="1.0" encoding="gbk"?><XML><AppId><![CDATA[2014072300007148]]></AppId><FromUserId></FromUserId><CreateTime><![CDATA[1406083506817]]></CreateTime><MsgType><![CDATA[event]]></MsgType><EventType><![CDATA[verifygw]]></EventType><ActionParam></ActionParam><AgreementId></AgreementId><AccountNo></AccountNo></XML>

开发者接收到该消息之后,需要使用支付宝的公钥对签名作验证,以确保该消息来源可靠。

  1. 将支付宝返回的POST参数(不包含sign参数)做字母排序,组成query类型的字符串,比如上文的POST请求组成的query类型字符串为:

     biz_content=<?xml version="1.0" encoding="gbk"?><XML><AppId><![CDATA[2014072300007148]]></AppId><FromUserId></FromUserId><CreateTime><![CDATA[1406083506817]]></CreateTime><MsgType><![CDATA[event]]></MsgType><EventType><![CDATA[verifygw]]></EventType><ActionParam></ActionParam><AgreementId></AgreementId><AccountNo></AccountNo></XML>&charset=GBK&service=alipay.service.check&sign_type=RSA
    
  2. 将签名参数使用base64解码为字节码串

  3. 使用OpenSSL的验签方法及支付宝公钥验证签名,以下为php代码的一个片段,其中$data为经过1排序处理后的query字符串,$rsaPublicKeyFilePath指支付宝公钥PEM文件的文件地址

     /* 使用支付宝的公钥对支付宝来的消息进行验签 */public function verify($data, $sign, $rsaPublicKeyFilePath) {/* 读取公钥文件,PEM格式 */    $pubKey = file_get_contents($rsaPublicKeyFilePath);/* 转换为openssl格式密钥 */$res = openssl_get_publickey($pubKey);/* 调用openssl内置方法验签 */$result = (bool) openssl_verify($data, base64_decode($sign), $res);/* 释放资源 */openssl_free_key($res);/* 返回验签结果 */return $result;}
    

五、返回验签成功消息

开发者验签成功之后,需要向支付宝网关回复一条消息,表示验签成功。支付宝收到符合规则的消息之后,开发者模式就激活了。以下为回复消息的格式(其中biz_content为开发者公钥):

<?xml version="1.0" encoding="GBK"?>
<alipay><response><biz_content>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB</biz_content><success>true</success></response><sign>DXr8LVfHytoZ3RR0K95pzGtA3d9LdpjIjLEis2BDIPQisPwS+FMFxZt9NCMt531EeDj/nbzoIAz8Or7PuqxNfSzNI8qnhirm/Hvr8uedXX9JiQxHu8q3Rw2lJWD8cqQzgf3xwV/+wbN8yuI7s8xjo6odq6NCqrAIu7E0DDfZyKo=</sign><sign_type>RSA</sign_type>
</alipay>

开发者可以参考相关Demo(Demo包请点此下载)。

支付宝支付接入(接入与验证)相关推荐

  1. Android客户端三步完成支付宝支付SDK接入

    迁移最新版本 1.下载SDK 下载地址:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&d ...

  2. 支付宝支付功能接入应用—配置密钥的生成

    配置密钥 即时到账接口支持DSA.RSA.MD5三种签名方式,请根据实际业务需求选择合适的签名方式. 配置RSA密钥 步骤1:RSA公私钥生成 生成方式一(推荐):使用支付宝提供的一键生成工具(内附使 ...

  3. 支付宝 上传应用公钥并获取支付宝公钥(新版接入)

    支付宝支付新版接入方式: 开通企业支付宝帐号>开通四个产品(APP支付 电脑网站支付 手机网站支付)>>再开通开放平台(选择自研开发者) >>在开放平台中创建应用> ...

  4. java 调用支付宝支付接口

    最近公司在做支付模块,在接入过程中遇到了很多坑,费了不少事,现在分享一下接入方法,也记录一下,以后可能还用的到.用的是支付宝的即时到帐支付功能和微信的扫码支付功能,相比起来,个人感觉支付宝的文档和接入 ...

  5. java版+支付宝支付和微信支付(一)(含源码)

    最近公司在做支付模块,在接入过程中遇到了很多坑,费了不少事,现在分享一下接入方法,也记录一下,以后可能还用的到.用的是支付宝的即时到帐支付功能和微信的扫码支付功能,相比起来,个人感觉支付宝的文档和接入 ...

  6. java版+支付宝支付和微信支付(一)

    最近公司在做支付模块,在接入过程中遇到了很多坑,费了不少事,现在分享一下接入方法,也记录一下,以后可能还用的到.用的是支付宝的即时到帐支付功能和微信的扫码支付功能,相比起来,个人感觉支付宝的文档和接入 ...

  7. [ 支付宝支付笔记]

      目录 前言: 支付宝支付: 创建AlipayClient对象(注意,这里的appId.私钥.公钥等信息需要根据实际情况进行替换): 构造AlipayTradePagePayRequest对象,设置 ...

  8. Android 接入支付宝支付实现

    接上篇android接入微信支付文章,这篇我们带你来接入支付宝支付服务 简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址, ...

  9. Android接入支付宝支付实现

    接上篇android接入微信支付文章,这篇我们带你来接入支付宝支付服务 简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址, ...

  10. 商家 APP 如何接入新版支付宝支付,老版本商家如何升级

    代码地址如下: http://www.demodashi.com/demo/14006.html ##前言 支付宝移动支付2.0版本对比1.0版本做了较大更新,新申请的商家都需要采用最新2.0版本 S ...

最新文章

  1. pythonweb服务器部署iis_Python开发入门与实战15-IIS部署
  2. 软件行业里学历和资历哪个更重要?
  3. 【APP】squid 3.0反向代理配置
  4. python3 __import__ 简介
  5. python画图颜色-python – 在matplotlib中绘制不同的颜色
  6. Java高级编程细节-动态代理-进阶高级开发必学技能
  7. BZOJ 2127: happiness
  8. paip.哈米架构CAO.txt
  9. mod_rewrite
  10. 云计算实战系列十三(Linux计划任务)
  11. VS2010团队开发调试器无法继续运行该进程,项目文件“”已被重命名或已不再解决方案中
  12. codeforce Gym 100418K Cards (概率,数学)
  13. Android BINDER详解
  14. 2018全球最值得关注的60家半导体公司,7家中国公司新上榜 | 年度榜单
  15. window新建文本快捷键
  16. js工具库Ramda和lodash和underscore用法对比
  17. 【转载】SOP SO SOIC TSSOP SSOP 封装直观比较图
  18. 数据监控难点之实时监测
  19. tyvj 2075 借教室 题解
  20. Visual studio未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包等问题解决

热门文章

  1. 单片机方波da转换c语言程序,基于51单片机的波形发生器DA转换(dac0832)
  2. 带你走进与千万数据通信者共成长的“家园”
  3. 生成中间带logo的二维码
  4. 一线游戏开发员揭秘薪酬
  5. [建立服务器系列] 其它配件的琐事(by cuishui)
  6. 语音mos测试软件,Pilot Pioneer3.6软件MOS语音测试简易指导书.doc
  7. JAVA中的float和double的区别
  8. rutracker怎么进入
  9. uni-app 搜索、历史记录功能简单实现
  10. 氢燃料电池汽车核心--燃料电池FCU电控开发