php的aopsdk,aop/AopClient.php · DEPRECATED/alipay-sdk-php - Gitee.com

namespace Alipay;

use Alipay\Exception\AlipayBase64Exception;

use Alipay\Exception\AlipayInvalidSignException;

use Alipay\Exception\AlipayOpenSslException;

use Alipay\Key\AlipayKeyPair;

use Alipay\Request\AbstractAlipayRequest;

use Alipay\Signer\AlipayRSA2Signer;

use Alipay\Signer\AlipaySigner;

class AopClient

{

/**

* SDK 版本

*/

const SDK_VERSION = 'alipay-sdk-php-20180705';

/**

* API 版本

*/

const API_VERSION = '1.0';

/**

* 应用 ID

*

* @var string

*/

protected $appId;

/**

* 签名器

*

* @var AlipaySigner

*/

protected $signer;

/**

* 请求发送器

*

* @var AlipayRequester

*/

protected $requester;

/**

* 响应解析器

*

* @var AlipayResponseFactory

*/

protected $parser;

/**

* 密钥对

*

* @var AlipayKeyPair

*/

protected $keyPair;

/**

* 创建客户端

*

* @param string $appId 应用 ID,请在开放平台管理页面获取

* @param AlipayKeyPair $keyPair 密钥对,用于存储支付宝公钥和应用私钥

* @param AlipaySigner $signer 签名器,用于生成和验证签名

* @param AlipayRequester $requester 请求发送器,用于发送 HTTP 请求

* @param AlipayResponseFactory $parser 响应解析器,用于解析服务器原始响应

*/

public function __construct(

$appId,

AlipayKeyPair $keyPair,

AlipaySigner $signer = null,

AlipayRequester $requester = null,

AlipayResponseFactory $parser = null

) {

$this->appId = $appId;

$this->keyPair = $keyPair;

$this->signer = $signer === null ? new AlipayRSA2Signer() : $signer;

$this->requester = $requester === null ? new AlipayCurlRequester() : $requester;

$this->parser = $parser === null ? new AlipayResponseFactory() : $parser;

}

/**

* 拼接请求参数并签名

*

* @param AbstractAlipayRequest $request

*

* @return array

*/

public function build(AbstractAlipayRequest $request)

{

// 组装系统参数

$sysParams = [];

$sysParams['app_id'] = $this->appId;

$sysParams['version'] = static::API_VERSION;

$sysParams['alipay_sdk'] = static::SDK_VERSION;

$sysParams['charset'] = $this->requester->getCharset();

$sysParams['format'] = $this->parser->getFormat();

$sysParams['sign_type'] = $this->signer->getSignType();

$sysParams['method'] = $request->getApiMethodName();

$sysParams['timestamp'] = $request->getTimestamp();

$sysParams['notify_url'] = $request->getNotifyUrl();

$sysParams['return_url'] = $request->getReturnUrl();

// $sysParams['terminal_type'] = $request->getTerminalType();

// $sysParams['terminal_info'] = $request->getTerminalInfo();

// $sysParams['prod_code'] = $request->getProdCode();

$sysParams['auth_token'] = $request->getAuthToken();

$sysParams['app_auth_token'] = $request->getAppAuthToken();

// 获取业务参数

$apiParams = $request->getApiParams();

// 合并参数

$totalParams = array_merge($apiParams, $sysParams);

// 转换可能是数组的参数

if ($request->arrayAsJson) {

foreach ($totalParams as &$param) {

if (is_array($param) || is_object($param)) {

$param = json_encode($param, JSON_UNESCAPED_UNICODE);

}

}

unset($param);

}

// 签名

$totalParams['sign'] = $this->signer->generateByParams(

$totalParams,

$this->keyPair->getPrivateKey()->asResource()

);

return $totalParams;

}

/**

* 发起请求、解析响应、验证签名

*

* @param array $params

*

* @return AlipayResponse

*/

public function request($params)

{

$raw = $this->requester->execute($params);

$response = $this->parser->parse($raw);

$this->signer->verify(

$response->getSign(),

$response->stripData(),

$this->keyPair->getPublicKey()->asResource()

);

return $response;

}

/**

* 一键执行请求

*

* @param AbstractAlipayRequest $request

*

* @return AlipayResponse

*

* @see self::build()

* @see self::request()

*/

public function execute(AbstractAlipayRequest $request)

{

$params = $this->build($request);

$response = $this->request($params);

return $response;

}

/**

* 仅拼接请求参数并签名,但不发起请求

*

* @param AbstractAlipayRequest $request

*

* @return string

*/

public function sdkExecute(AbstractAlipayRequest $request)

{

$params = $this->build($request);

return http_build_query($params);

}

/**

* 仅拼接请求参数并签名,生成跳转 URL

*

* @param AbstractAlipayRequest $request

*

* @return string

*/

public function pageExecuteUrl(AbstractAlipayRequest $request)

{

$queryParams = $this->build($request);

$url = $this->requester->getGateway() . '?' . http_build_query($queryParams);

return $url;

}

/**

* 仅拼接请求参数并签名,生成表单 HTML

*

* @param AbstractAlipayRequest $request

*

* @return string

*/

public function pageExecuteForm(AbstractAlipayRequest $request)

{

$fields = $this->build($request);

$html = "

";

foreach ($fields as $key => $value) {

if (AlipayHelper::isEmpty($value)) {

continue;

}

$value = htmlentities($value, ENT_QUOTES | ENT_HTML5);

$html .= "";

}

$html .= "

";

$html .= "";

return $html;

}

/**

* 验证由支付宝服务器发来的回调通知请求,其签名数据是否未被篡改

*

* @param array|null $params 请求参数(默认使用 $_POST)

*

* @return bool

*/

public function verify($params = null)

{

if ($params === null) {

$params = $_POST;

}

try {

$this->signer->verifyByParams(

$params,

$this->keyPair->getPublicKey()->asResource()

);

} catch (AlipayInvalidSignException $ex) {

return false;

} catch (\InvalidArgumentException $ex) {

return false;

}

return true;

}

/**

* 解密被支付宝加密的敏感数据

*

* @param string $encryptedData Base64 格式的已加密的数据,如手机号

* @param string $encodedKey Base64 编码后的密钥

* @param string $cipher 解密算法,保持默认值即可

*

* @throws AlipayOpenSslException

*

* @return string

*

* @see https://docs.alipay.com/mini/introduce/aes

* @see https://docs.alipay.com/mini/introduce/getphonenumber

*/

public static function decrypt($encryptedData, $encodedKey, $cipher = 'aes-128-cbc')

{

$key = base64_decode($encodedKey);

if ($key === false) {

throw new AlipayBase64Exception($encodedKey);

}

if (!in_array($cipher, openssl_get_cipher_methods(), true)) {

throw new AlipayOpenSslException("Cipher algorithm {$cipher} not available");

}

$result = openssl_decrypt($encryptedData, $cipher, $key);

if ($result === false) {

throw new AlipayOpenSslException();

}

return $result;

}

/**

* 获取应用 ID

*

* @return string

*/

public function getAppId()

{

return $this->appId;

}

/**

* 获取与本客户端关联的密钥对

*

* @return AlipayKeyPair

*/

public function getKeyPair()

{

return $this->keyPair;

}

/**

* 获取与本客户端关联的响应解析器

*

* @return AlipayResponseFactory

*/

public function getParser()

{

return $this->parser;

}

/**

* 获取与本客户端关联的请求发送器

*

* @return AlipayRequester

*/

public function getRequester()

{

return $this->requester;

}

/**

* 获取与本客户端关联的签名器

*

* @return AlipaySigner

*/

public function getSigner()

{

return $this->signer;

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/** *SDK调用说明 */ public function index() { //调用测试 import('AlipaySDK.Alipay'); $pay = new \Alipay(); /** * $trade_type 交易类型 app wap web */ $data = $pay->alipay('215360251411626', '0.01', '测试', '测试', 'web', 'http://www.test.com/callback'); //wap 结果string(880) "https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"QUICK_WAP_PAY"}&charset=UTF-8&format=json&method=alipay.trade.wap.pay&notify_url=http://www.test.com/callback&sign=RKPyAKAPv28GKfhWIdsCCOualcg2DMCbhpny6yw/tTvJ3Och+yIfS1au7zbGBnm5sFoX2enfgfZekTqBCyzK0/Irw01zDSAOJM4mPYxs96OUkOglWS5Zuq64JwQBAzesFvzKBGgsH2ecL8EUCclDbBIIrAT/DWr6KenyvQvXOxVQNwn540NoS754oBU0w9vLdrGj0Jljvn8D6cbDgnHiE8qLOgpaXv1ROLwtol0yj2H7cM/G7A9RM5Y8jV1aVNYWND8M4XAK5Wr8zwoa9RocbqDpYfw66NXSvrsuFpHf7MpWtSybH5TnxOP5kwzr7pJRDi0XRAyD9u1geei9thUsqA==&sign_type=RSA2&timestamp=2018-09-04+11:50:49&version=1.0" //app 结果直接返回客户端无需处理 alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"QUICK_MSECURITY_PAY"}&charset=UTF-8&format=json&method=alipay.trade.app.pay¬ify_url=http://www.test.com/callback&sign_type=RSA2×tamp=2018-09-04+11:54:53&version=1.0&sign=Ab6a0lDxaNcWLL7XcETM85DbBrJI8Sj6czPGKBNK17MZ85FBeStKL+nA/Z4tMORC7H39ooVCDz9ILpbRUfU0eaE7Oe2MOz+Jsj7oUEqwvbvt7eebyPgy2PmPlfAwcZypKla0nUJwHOF5F0cL+mvMGk/K7f2PYMtWL/dIfPOQGC1hBoKFiS+ZF7jIJ98R0AaITAjvQ1drAmJqXpMzUCa1XsTCuQXMXYKu8DNGb/hooJu0xUH/qUU+4fKD0TmBYANQHIrKIBNFl6J2Gw504Mlcfh929ce+YdzF8DXQjacsBSp7f08UJ/FfRvhVXqAfX8lAFETGjc7FXGgU6simNgv1UQ== //web 结果 https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"FAST_INSTANT_TRADE_PAY"}&charset=UTF-8&format=json&method=alipay.trade.page.pay¬ify_url=http://www.test.com/callback&sign=l9+A5ZByhwLjQwzRes9+ymKkFVu7uMND4j6cIWmXIXHjrBnGaHkcr+hVkwocaU3d/hB2hdPnxDruhyYFgchnsIA/XWumosG9uEnKyD/T52+VZ8FxLh5wpwH0ucvKzbMjgIWk9dPVjUAU5Zz7QjqKsJ+AsItFpttd0tEVZD4je2PFp5mizeCWT0id0H+y44IGexN705rNe6TGpfJDG0RSDsbD/ZoCzd8FRzC9cv5uwf00J1E9Yc0bUH/l37WFDBTv/LZnqdfeWpaiu8ro7CJ3R+z/xGQTHToo2zLtEc4Cwop096X8WqwSdGbyI9FCemcFzigRB+6yzD9nS4PsWEG3Ug==&sign_type=RSA2×tamp=2018-09-04+11:56:06&version=1.0 echo $data; exit; } /** * 回调地址 */ public function callback() { import('AlipaySDK.Alipay'); $pay = new \Alipay(); $data = $_POST; $verify_result = $pay->check($data); if ($verify_result) { // 验证成功 $out_trade_no = $data['out_trade_no']; // 支付宝交易号 $trade_no = $data['trade_no']; // 交易状态 $trade_status = $data['trade_status']; if ($trade_status == 'TRADE_FINISHED') { //成功之后的操作 } else if ($trade_status == 'TRADE_SUCCESS') { //成功之后的操作 } echo "success"; // 请不要修改或删除 } else { // 验证失败 echo "fail"; } } 声明:是文档根据Alipay文档二次整合,完全开源。如果觉得还可以请点击收藏

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值