赞
踩
支付宝在 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\":\"abc@sina.com\"," .
"\"amount\":\"12.23\"," .
"\"payer_show_name\":\"上海交通卡退款\"," .
"\"payee_real_name\":\"张三\"," .
"\"remark\":\"转账备注\"" .
" }");
修改完成之后,就可以跑代码进行测试了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。