PHP 接入支付宝证书方式签名以及验签

支付宝在 2019.10.25 日左右更新了新的 PHP SDK (v4.1.0)。 之前的 PHP SDK(v3.4.2) 仅支持公钥方式加签。这次更新之后 PHP SDK 也可以使用证书进行签名和验签了。

支付宝官方 SDK 下载地址

下载解压 并将文件夹中的 aop 文件夹 直接复制到项目中你想要放到文件夹里,例如 extend

文件夹 (为了测试 crt 证书文件也已经放到同目录下 cert 目录中了)



先修正 SDK 中的1个小错误:AopCertClient.php 中

478 行左右 有一个检查是否为空的方法



修改为

	if (method_exists($request, 'getApiVersion')){
$iv = $request->getApiVersion();
}else{
$iv = $this->apiVersion;
}

引入文件

	require_once EXTEND_PATH.'aop/AopCertClient.php';
require_once EXTEND_PATH.'aop/AopCertification.php';
require_once EXTEND_PATH.'aop/request/AlipayTradeQueryRequest.php';
require_once EXTEND_PATH.'aop/request/AlipayTradeWapPayRequest.php';
require_once EXTEND_PATH.'aop/request/AlipayOpenOperationOpenbizmockBizQueryRequest.php';

从 aop/test/ 目录下 找下 AopCertClientTest.php (因为是使用证书进行签名,如果是使用公钥进行签名,就应该参考 AopClientTest.php 文件,不做赘述)直接复制相关代码进行修改比如 我复制的就是

	//1、execute 使用
$aop = new AopCertClient ();
$appCertPath = "应用证书路径(要确保证书文件可读),例如:/home/admin/cert/appCertPublicKey.crt";
$alipayCertPath = "支付宝公钥证书路径(要确保证书文件可读),例如:/home/admin/cert/alipayCertPublicKey_RSA2.crt";
$rootCertPath = "支付宝根证书路径(要确保证书文件可读),例如:/home/admin/cert/alipayRootCert.crt";
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">gatewayUrl</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'https://openapi.alipay.com/gateway.do'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">appId</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'你的appid'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">rsaPrivateKey</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'你的应用私钥'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">alipayrsaPublicKey</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getPublicKey</span><span class="token punctuation">(</span><span class="token variable">$alipayCertPath</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//调用getPublicKey从支付宝公钥证书中提取公钥</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">apiVersion</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'1.0'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">signType</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'RSA2'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">postCharset</span><span class="token operator">=</span><span class="token single-quoted-string string">'utf-8'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">format</span><span class="token operator">=</span><span class="token single-quoted-string string">'json'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">isCheckAlipayPublicCert</span> <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span><span class="token comment">//是否校验自动下载的支付宝公钥证书,如果开启校验要保证支付宝根证书在有效期内</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">appCertSN</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getCertSN</span><span class="token punctuation">(</span><span class="token variable">$appCertPath</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//调用getCertSN获取证书序列号</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">alipayRootCertSN</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getRootCertSN</span><span class="token punctuation">(</span><span class="token variable">$rootCertPath</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//调用getRootCertSN获取支付宝根证书序列号</span> <span class="token variable">$request</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AlipayTradeQueryRequest</span> <span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">setBizContent</span><span class="token punctuation">(</span><span class="token double-quoted-string string">"{"</span> <span class="token punctuation">.</span>
<span class="token double-quoted-string string">"\"out_trade_no\":\"20150320010101001\","</span> <span class="token punctuation">.</span>
<span class="token double-quoted-string string">"\"trade_no\":\"2014112611001004680 073956707\","</span> <span class="token punctuation">.</span>
<span class="token double-quoted-string string">"\"org_pid\":\"2088101117952222\","</span> <span class="token punctuation">.</span>
<span class="token double-quoted-string string">" \"query_options\":["</span> <span class="token punctuation">.</span>
<span class="token double-quoted-string string">" \"TRADE_SETTE_INFO\""</span> <span class="token punctuation">.</span>
<span class="token double-quoted-string string">" ]"</span> <span class="token punctuation">.</span>
<span class="token double-quoted-string string">" }"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">execute</span> <span class="token punctuation">(</span> <span class="token variable">$request</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

因为我要用的是 单笔转账到支付宝账户的接口。

所以 上面的代码要修改两个地方。

	$request = new AlipayFundTransToaccountTransferRequest ();
// 官方示例 切记要自己修改
$request->setBizContent("{" .
"\"out_biz_no\":\"3142321423432\"," .
"\"payee_type\":\"ALIPAY_LOGONID\"," .
"\"payee_account\":\"abc@sina.com\"," .
"\"amount\":\"12.23\"," .
"\"payer_show_name\":\"上海交通卡退款\"," .
"\"payee_real_name\":\"张三\"," .
"\"remark\":\"转账备注\"" .
" }");

修改完成之后,就可以跑代码进行测试了。

                                </div>

原文:https://blog.csdn.net/csd465038717/article/details/102748277

支付宝证书签名 PHP SDK的更多相关文章

  1. OpenSSL与公钥私钥证书签名的千丝万缕

    导语 人对任何事物的认识都是阶段性的,从无知到知晓,从懵懂到半知半解,从误解到将信将疑,从晕头转向到下定决心吃透. 介绍 OpenSSL是一个强大的命令行工具,它可以用来处理许多种跟PKI(Publi ...

  2. SHA256withRSA证书签名,私钥签名/公钥验签

    证书签名 package test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundE ...

  3. [加密]openssl之数字证书签名,CA认证原理及详细操作

    转自:http://blog.sina.com.cn/s/blog_cfee55a70102wn3h.html 1 公钥密码体系(Public-key Cryptography) 公钥密码体系,又称非 ...

  4. APP获取证书签名指纹

    Android: public static String getSignatureSHA1(Context context) { String sign = null; try { // 通过包管理 ...

  5. [Apple开发者帐户帮助]三、创建证书(7)创建证书签名请求

    Mac上的Keychain Access允许您创建证书签名请求(CSR). 启动位于的Keychain Access /Applications/Utilities. 选择Keychain Acces ...

  6. 集成支付宝钱包支付iOS SDK的方法与经验

    流程 摘自第一个文档<支付宝钱包支付接口开发包2.0标准版.pdf> 图中的“商户客户端”就是我们的iOS客户端需要做的事情: 调用支付宝支付接口 处理支付宝返回的支付结果 在调用支付宝支 ...

  7. ios--集成支付宝钱包支付iOS SDK的方法与经验

    文/胖花花(简书作者)原文链接:http://www.jianshu.com/p/fe56e122663e著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 没想到,支付宝的SDK是我目前 ...

  8. 集成支付宝钱包支付ios SDK的方法和经验

    没想到,支付宝的SDK是我目前用过的所有第三方SDK中最难用的一个了. 下载 首先,你要想找到这个SDK,都得费点功夫.现在的SDK改名叫移动支付集成开发包了,下载页面在 这里 的 “请点此下载集成开 ...

  9. ClickOnce证书签名

    打开Microsoft .NET Framework 的SDK命令提示,按以下步骤操作: 1.创建一个自我签署的X.509证书(.cer)和一个.pvk私钥文件,用到makecert工具,命令如下: ...

随机推荐

  1. Zsh vs. Bash不完全对比解析,zsh是一种更强大的被成为“终极”的Shell

    https://www.zhihu.com/question/21418449 Mort | Zsh vs. Bash:不完全对比解析(1) 2014-10-07  bdpqlxz     Zsh和B ...

  2. php基础函数,数组

    1·字符串的处理: 2·爆炸函数(explode()): 里面填两个参数把.炸掉,在abc里 炸出来的数组 粘回去(implode()): 两个参数同上 3·截取字符串(substr()) 里面放三个 ...

  3. git 时 出现 Permission denied (publickey).

    https://blog.csdn.net/awp0011/article/details/73368481 第一次使用github.com在本地 执行 git clone git@github.co ...

  4. 测开之路七十八:shell之函数和参数

    函数 function function_name(){    statement1    Statement2    ....    statementn} function_name $var1  ...

  5. 【大前端攻城狮之路·二】Javascript&QA⼯程师

    今天给大家分享的主题的是Javascript&QA⼯程师.看到这个主题,可能有人问:前端开发完就OK了,剩下的丢给测试就行,哪里还需要关心这些?但事实上呢,测试是前端开发非常重要的环节,也是迈 ...

  6. Vagrant 入门 - share

    原文地址 译者注:Vagrant Share 功能通过 ngrok 向所有人提供访问内网开发环境的能力. 现在我们已经启动并运行了一台 Web 服务器,并且可以从你的机器访问,我们拥有一个相当实用的开 ...

  7. Vagrant 入门 - 启动 vagrant 及 通过 ssh 登录虚拟机

    原文地址 在终端运行 vagrant up 命令即可启动 Vagrant 环境: $ vagrant up 不到一分钟,命令就会执行完毕,运行 Ubuntu 的虚拟机会启动成功.Vagrant 运行虚 ...

  8. Google File System 论文阅读笔记

    核心目标:Google File System是一个面向密集应用的,可伸缩的大规模分布式文件系统.GFS运行在廉价的设备上,提供给了灾难冗余的能力,为大量客户机提供了高性能的服务. 1.一系列前提 G ...

  9. Jmeter中Bean shell脚本格式修改为utf-8

    遇到的问题: 在做 一个发贴的接口测试时发现,发送数字+纯字母贴子时,可以正常请求成功.但当贴内容为中文时,服务端编码为乱码??. 原因: jmeter中,shell脚本的默认的格式为GBK,所以我在 ...

  10. 微信小程序(一)--微信小程序的介绍

    一.微信小程序简介 小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用.也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题.应用将无 ...