支付宝证书签名 PHP SDK
程序员文章站
2022-05-30 08:17:26
...
PHP 接入支付宝证书方式签名以及验签
支付宝在 2019.10.25 日左右更新了新的 PHP SDK (v4.1.0)。 之前的 PHP SDK(v3.4.2) 仅支持公钥方式加签。这次更新之后 PHP SDK 也可以使用证书进行签名和验签了。
下载解压 并将文件夹中的 aop 文件夹 直接复制到项目中你想要放到文件夹里,例如 extend
文件夹 (为了测试 crt 证书文件也已经放到同目录下 cert 目录中了)
先修正 SDK 中的两个小错误:AopCertClient.php 中
478 行左右 有一个检查是否为空的方法
修改为
if (method_exists($request, 'getApiVersion')){
$iv = $request->getApiVersion();
}else{
$iv = $this->apiVersion;
}
502 行左右 $request 的 getApiParams 方法少了一个 字母 m 改了就好
修改后
//获取业务参数
$apiParams = $request->getApiParams();
引入文件
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";
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = '你的appid';
$aop->rsaPrivateKey = '你的应用私钥';
$aop->alipayrsaPublicKey = $aop->getPublicKey($alipayCertPath);//调用getPublicKey从支付宝公钥证书中提取公钥
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='utf-8';
$aop->format='json';
$aop->isCheckAlipayPublicCert = true;//是否校验自动下载的支付宝公钥证书,如果开启校验要保证支付宝根证书在有效期内
$aop->appCertSN = $aop->getCertSN($appCertPath);//调用getCertSN获取证书***
$aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath);//调用getRootCertSN获取支付宝根证书***
$request = new AlipayTradeQueryRequest ();
$request->setBizContent("{" .
"\"out_trade_no\":\"20150320010101001\"," .
"\"trade_no\":\"2014112611001004680 073956707\"," .
"\"org_pid\":\"2088101117952222\"," .
" \"query_options\":[" .
" \"TRADE_SETTE_INFO\"" .
" ]" .
" }");
$result = $aop->execute ( $request);
var_dump($result);
因为我要用的是 单笔转账到支付宝账户的接口。
所以 上面的代码要修改两个地方。
$request = new AlipayFundTransToaccountTransferRequest ();
// 官方示例 切记要自己修改
$request->setBizContent("{" .
"\"out_biz_no\":\"3142321423432\"," .
"\"payee_type\":\"ALIPAY_LOGONID\"," .
"\"payee_account\":\"aaa@qq.com\"," .
"\"amount\":\"12.23\"," .
"\"payer_show_name\":\"上海交通卡退款\"," .
"\"payee_real_name\":\"张三\"," .
"\"remark\":\"转账备注\"" .
" }");
修改完成之后,就可以跑代码进行测试了。
下一篇: php支付宝开发之pc网站支付接入
推荐阅读
-
解决php使用支付宝SDK报错问题
-
PHP---微信JS-SDK获取access_token/jsapi_ticket/signature权限签名算法,php/thinkphp实现微信分享自定义文字和图片
-
对接支付宝支付接口开发详细步骤(证书签名方式)
-
Alipay 支付宝SDK PHP Fatal error: Class 'LtObjectUtil' not found in。
-
[PHP]微信红包接口实践说明 CA证书出错 签名异常
-
支付宝快捷支付 PHP服务端签名
-
支付宝证书签名 PHP SDK
-
支付宝快捷支付 PHP服务端签名
-
支付宝PHP SDK(单文件)
-
微信小微商户下载平台证书接口(PHP SHA256 with RSA 签名,AEAD_AES_256_GCM解密方法)