支付宝支付接入(接入与验证)

原文: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.check
    sign=ntjOmXFGJMdfdMnrTL5rEp9QG8d0lDEoGg3ZHvqemHeI8BlQoEsFbhEn0IfQT+pvfJz5RCuE+3Qh1X7I4z5iTIiGjDBstc0xeuiAmtP9TrJZuw2jUAODFB9qOwBJLNcWlKHUGTU/db/qRsJQCj8EjoJvSi9MRM/xKv/XmduS/C4=
    sign_type=RSA
    charset=GBK
    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>

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

  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包请点此下载)。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

原文地址:https://www.cnblogs.com/siwnchh/p/10464300.html

时间: 2024-08-30 01:45:14

支付宝支付接入(接入与验证)的相关文章

iOS支付宝支付(Alipay)详细接入流程以及项目中遇到的问题分析

iOS支付宝支付(Alipay)详细接入流程以及项目中遇到的问题分析 浏览: 149 发布日期: 2016-10-19  分类: ios 最近在项目中接入了微信支付和支付宝支付,总的来说没有那么坑,很多人都说文档不全什么的,确实没有面面 俱到,但是认真一步一步测试下还是妥妥的,再配合懂得后台,效率也是很高的,看了这篇文章,你也只要几分钟, 就能轻松接入支付宝,在别人投来崇拜的眼光的同时,你就能潇洒的回一句,略懂略懂......   先给大家我写的微信支付,很详细哦,喜欢的点个赞点击打开微信支付链

Android app 第三方支付宝支付接入

支付宝的接入相对比较简单,看看支付宝官网的文档基本都能搞定,但是切记一点让你们的后台也要搞清楚支付宝的流程,不然对接起来是一件很蛋疼的事情. 开始搬砖 注意事项 开发前一定要阅读支付宝官方文档 强烈建议签名等处理在后台处理,我这个是测试是在自己本地写的,不要吐槽 想获取支付宝合作商户ID,及支付宝公钥请点击支付宝链接,生成密钥及PKCS8转码工具在文档中 添加android.permission.INTERNET权限和android.permission.ACCESS_NETWORK_STATE

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

代码地址如下:http://www.demodashi.com/demo/14006.html 前言 支付宝移动支付2.0版本对比1.0版本做了较大更新,新申请的商家都需要采用最新2.0版本 SDK 才可以成功接入,老版本需要升级的需要对 APP 进行重新签约才可以. 老版本支付宝支付: 签名方式rsa1(sha1),支付宝公钥是确定的,每个商家的都是一样的. 新版本支付宝支付: 签名方式rsa2(sha256),支付宝公钥每个商家都是不同的. 升级程序实现 老版本java服务端代码: 返回订单

使用Tornado异步接入第三方(支付宝)支付

目前国内比较流行的第三方支付主要有支付宝和微信支付,博主最近研究了下如何用Python接入支付宝支付,这里我以Tornado作为web框架,接入支付宝构造支付接口. 使用Tornado异步接入支付宝支付流程: 1. 进入蚂蚁金服开放平台填写开发者信息.应用信息 2. 配置RSA256密钥,生成支付宝和应用的密钥 3. 构造订单接口API,生成订单 4. 构造支付接口 1. 进入蚂蚁金服开放平台填写开发者信息.应用信息 这里通过沙箱环境开发测试接口,蚂蚁金服开放平台-->开发者中心-->研发者服

腾腾流氓,云云更流氓(问微信怎样接入支付宝支付),手贱的赶紧点,你会感谢我的

草原上的两匹马! 打从当年微信开始布局公众号之初时,估计就已经想到了与支付宝正面冲突的场面,所以微信先来个瞒天过海,在春晚搞了个微信红包,那叫一个火呀,此时的云云隐隐感觉到些许不安. 早期的微信开发者可能都知道,微信公众号刚开始的时候接入支付要交巨额的保证金,根据行业不同,金额也不同,但也有大几万呢.这让很大一部分微型企业望而却步(老子创业时,注册公司的注册资金都免了,用个支付,你还要保证金),所以,大家果断用支付宝. 这样一来,腾哥的如意算盘算是打到自己脚面了,本打算可以用企业交的保证金拿去做

[支付宝]手机网站支付快速接入

参考开发文档:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.FjX7f6&treeId=193&articleId=105285&docType=1#s0 文档中其它地方还好理解,倒是第三步有点容易让人误会,下面是第三步中的一张表,红色字体解释了让人容易误会的地方: 配置通用接入参数: 参数名称 参数说明 APP_ID 开放平台应用的APPID,详见创建应用并获取APPID,应用审核上线后生成的一个ap

Android 支付宝以及微信支付快速接入流程

简介 随着移动支付的普及,越来越多的App采用第三发支付,在这里我们以支付宝为例,做一个快速集成! 一.Android快速实现支付宝支付 1.首先,我们需要前往支付宝开放平台,申请我们的支付功能:https://open.alipay.com/platform/home.htm 支付宝首页 这里 有两个需要注意的地方 一个是管理中心,另外一个是我的支付宝 管理中心: 管理中心 管理中心 我们需要 创建一个应用 提交给支付宝进行审核. 我的支付宝: 在这里我的支付宝 是一个商户版,一会我们会需要在

移动支付(支付宝支付2016最新接入详解)

接入流程 一:公司开通支付宝商户号 二:注册登录蚂蚁金服开放平台创建应用 三:项目集成支付宝SDK 一:公司开通支付宝商户号 1 注册商户号:https://mobiless.alipay.com/ 可以把链接发给人事,让她弄一下,需要提交的资料也只能由人事来弄. 二:注册登录蚂蚁金服开放平台创建应用 蚂蚁金服开放平台:https://open.alipay.com/platform/home.htm 创建成功并上线是如下面: 1 创建应用 2 应用环境设置 应用公钥配置 点击支付宝的秘钥生成器

如何在微信中接入支付宝支付

前提:需要一台nginx服务器做反向代理 前言:支付宝支付手机支付一共分4个页面分别为1.输入手机号页面,2.输入验证码页面,3.输入支付密码页面,4.支付结果页面 1.配置nginx服务器为 https://mclient.alipay.com做反向代理,对app和支付宝做反向代理如下,要求支付宝的反向代理后的域名与app的域名为同域. server { listen 80; server_name app.domin.com; access_log /var/website/app/logs

支付宝PC端接入PHP

引入支付宝接口 放入一个插件库中,方便管理 创建支付类 1.发起支付 public function init() { $order_id = $_REQUEST['order_id']; $order_info = $this->order_db->get_one(array('id'=>$order_id)); $product_info = $this->product_db->get_one(array('id'=>$order_info['product_id