支付宝证书签名 PHP SDK

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

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

支付宝官方 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\":\"转账备注\"" .
	"  }");

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信公众号JS-SDK签名算法是用来在网页中调用微信公众号接口时验证身份和保护数据安全的一种机制。下面我来介绍一下如何使用PHP语言实现该签名算法。 1. 首先,你需要获取微信公众号的appid和appsecret,这些信息可以在公众号的开发者后台获取。 2. 在你的PHP代码中,引入微信官方提供的SDK文件,即WechatJSSDK类文件。 3. 创建一个WechatJSSDK对象,并将公众号的appid和appsecret作为参数传递给构造函数。 ```php require_once 'WechatJSSDK.php'; $wechatJSSDK = new WechatJSSDK('your_appid', 'your_appsecret'); ``` 4. 调用WechatJSSDK对象的getSignature方法,传递当前网页的URL作为参数。该方法将返回一个数组,其中包含appId、timestamp、nonceStr和signature。 ```php $url = 'http://example.com/page.html'; $signature = $wechatJSSDK->getSignature($url); ``` 5. 最后,将获取到的signature数组中的数据输出到前端页面,供前端JS调用。 ```php echo json_encode($signature); ``` 通过以上步骤,你就可以在PHP中实现微信公众号JS-SDK签名算法了。当网页加载时,可以获取到签名数据,然后在前端JS中初始化微信JS-SDK,进行公众号的相关操作,比如获取用户信息、分享到朋友圈等。 需要注意的是,你需要将WechatJSSDK类文件正确引入,并根据自己的appid和appsecret填写正确的参数。另外,微信的官方文档中也提供了详细的签名算法说明,你可以参考官方文档进行更深入的学习和理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值