laravel 支付宝 SDK 交易信息 对账单下载
-
进入支付宝 官方api文档查找对应的php sdk,地址:https://opendocs.alipay.com/open/54/cyz7do/#SDK
-
使用新版的sdk,地址:https://opendocs.alipay.com/open/00y8k9
-
点击php Composer 项目依赖,地址:https://packagist.org/packages/alipaysdk/easysdk
-
安装Composer 安装 alipay SDK 命令:composer require alipaysdk/easysdk
-
SDK接口文档:https://github.com/alipay/alipay-easysdk/blob/master/APIDoc.md
-
SDK接口文档:https://github.com/alipay/alipay-easysdk/tree/master/php
-
请求下载对账单示例:
<?php
namespace App\Console\Commands;
use Alipay\EasySDK\Kernel\Config;
use Alipay\EasySDK\Kernel\Factory;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
use PHPUnit\Exception;
class Sync_Trade_Query extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'SyncTradeQuery';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Sync Trade Query';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* https://github.com/alipay/alipay-easysdk/tree/master/php
* https://github.com/alipay/alipay-easysdk/blob/master/APIDoc.md
* https://opendocs.alipay.com/apis/api_1/alipay.trade.query
* https://opendocs.alipay.com/apis/api_15/alipay.data.dataservice.bill.downloadurl.query
* https://opendocs.alipay.com/open/00y8k9
* https://opendocs.alipay.com/open/54/cyz7do/#SDK
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
Factory::setOptions($this->getOptions());
//支付宝api
#$this->syncAlipay($out_trade_no);
//下载对账单
$billDate = '2020-06-03';
$this->downloadAlipayBill($billDate);
}
/**
* 查询交易
* @param $out_trade_no
* @throws \Exception
*/
private function syncAlipay($out_trade_no){
Log::info('syncAlipay', ['syncAlipay']);
try{
$result = Factory::payment()->common()->query($out_trade_no);
Log::info('syncAlipay result', [$result]);
if (!empty($result->code) && $result->code == 10000) {
Log::info('syncAlipay chargeAmount', [$result->chargeAmount]);
Log::info('syncAlipay success', [$result->httpBody]);
} else {
Log::info('syncAlipay error', [$result->chargeAmount]);
}
}catch (Exception $e){
Log::info('syncAlipay Exception', [$e->getMessage()]);
}
}
/**
* 支付宝对账单下载地址
* @throws \Exception
*/
private function downloadAlipayBill($billDate){
Log::info('downloadAlipayBill', ['downloadAlipayBill']);
try{
$billType ='signcustomer';
#$billType ='trade';
$result = Factory::payment()->common()->downloadBill($billType, $billDate);
if (!empty($result->code) && $result->code == 10000) {
Log::info('downloadAlipayBill success', [$result]);
Log::info('downloadAlipayBill success', [$result->billDownloadUrl]);
} else {
Log::info('downloadAlipayBill error', [$result]);
}
}catch (Exception $e){
Log::info('downloadAlipayBill Exception', [$e->getMessage()]);
}
}
//设置参数
public function getOptions()
{
$options = new Config();
$options->protocol = 'https';
$options->gatewayHost = 'openapi.alipay.com';
$options->signType = 'RSA2';
$options->appId = config('pay.alipay.app_id');
// 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中
$options->merchantPrivateKey = config('pay.alipay.private_key');
//$options->alipayCertPath = '<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->';
//$options->alipayRootCertPath = '<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt" -->';
//$options->merchantCertPath = '<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->';
//注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可
$options->alipayPublicKey = config('pay.alipay.ali_public_key');
//可设置异步通知接收服务地址(可选)
$options->notifyUrl = "<-- 请填写您的支付类接口异步通知接收服务地址,例如:https://www.test.com/callback -->";
//可设置AES密钥,调用AES加解密相关接口时需要(可选)
$options->encryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->";
return $options;
}
}
.env文件
ALI_APP_ID=2017082518448464 ALI_PUBLIC_KEY=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgSV6ePfSKZa9nY5opAmIKP+zFwvBCXLuj4GvKBbog6CW7EcZvoQqOn+lTxdBFJ3EVgdTxMXzCjhIDMsOnwhdGxdmXCIaqZ5kYnk9EBKECIqUZUYj9S3uYxmXUrsIUJ4PNdKTYvd3hedLbc1UZtFlgmiA8MZ7X+7y+f0nZOsBSVMv5edC5U92EWAMnHO2PBDHba/peuGI+5fz6jjVFcxJ3VH1nAppexiRUjG1zj9TJnazWBAQRmH6uCrvCWMlvIHo4tV+nklU0GxRmRRaUam0fctvuVCiBkKTCZUkFZK43Btq2yGyNNuX643SxFNr2uZX3FXXOblsmCi2xgBGItKd5wIDAQAB ALI_PRIVATE_KEY=MIIEogIBAAKCAQEAoO7kdE9OHhL410+tzxE5k61CnbNMnDNVOzcvDeXjyHBy2Q8M6qG7sce2G1aIJ5eNpQ1zBcTOGaeYbjXDBbJlwPPcgrYuhieU2l7t+6JmfrB3XsKJgISp9/XMHgYevFOV475icDfntsAEcWnFgmW+K2Hka68xGnYD5Lvwq0Y9HTlL5R+mIDIkUdjPm3XKJE0E2Sg+IRYxCjL0kxiG6dLku/5UMg6UwLTf5rydN7RXM5jP8sIgPnTRZudhy7jww8FJv10cyezucdRpUhMzQcGv14tchOfZTLp7oF9mHRUGY84opp9po0BvM+QI09rnm6wDhauJSP0LrGXn3yZ520UokQIDAQABAoIBADqFA+/DUr2e2nu4zpQISG6Jxzp/E3GNPQXuWB7upHijYy/IyEKdkxnfbDneql3zPx9wl43WdbdgeQ5CYGs25sdWJa4mPx6rT/ZkJJenAyw4UP/VL5jbJM80wwd75DtJDa0l8reprImIo1T2SErVYmR2EVCTAQEFPv8y1B4DyX9RXcZEGvGlI1CbBP5IOdJ0l7Njs16ssQdXmeXHYPCwLlSpcQiLYRtLcseDRO3/24xWI7nlNE1TRWivK4vE+noeAK+iie0tg5b3GVjhcAzgItWdXK9zanJTU/B3aahiYDx8S9OJ6kBJDFo0bXRiwxbAj6G7vLI/mVCbXXZhqwVvAy0CgYEAzVyKBfBdqrp4GYrtgzfp1bKz3DgomiYA/uvREL6hIvbi4yDieQnNICwApIKhqb84V912Ptjr4c9zVZbbUjkH598uccMsqoXhzNrYVYp0Ux8MSx4ovj/tgrDwNeYvEUsscIxU2gSTQaHqquaPxPoAPpvZKr0ZwgeaV2q7mUErulsCgYEAyJ3QBMfPse//jSIVOcy5s3lkRYZQIb8CXlrKelNFyobQoq+bL//cb74bWQUdvzslKPy3/+rrAKwgRBPyFKyOqYqjjJMw9yQnocMNLgWtFEx4Ng5eUYxr92w+1fsxMJwv4+lfoQJtJaEBRCL7MleNg8TSPx1V5u4wqM9viQIQJIMCgYAbPI7BwuNpZVnQaXCe2qeUxCK+rmQULb4sETKlOeM9M+lbnlzrGLWv8qYTK5AtZ0MdxC2OoE6IoG73hw6HlTDLO/p49B3Ub/VGqi/PCJHtBE0pGVLmCKyDjNwPCfxsGsBGHRaT4890APmSuQmQYmft5dWjqXjlFwUNWwaOiOo3yQKBgHV+r+lM2SCeri4LayEJ/SzXCNoLOv04sHtwcyvHf5WI9cKCVMJ8+K7dSYkOjQiF7FKgCGezr9hZ9x/ICrz+/yLe1sCrKD9mhmugICT3IBJGYxVNvwHF2yny1K5gSsPshcPW17ImCKTEMkiksDggvPoSmQxr8vaoRAlqTCmS8r9fAoGAcs7yiKlMoIuEb7148AmA3NeMzN0C4qiiypw2mgT5xkxOqsbNRQDFKtFLqQpnZoMlPdBlmlTa02vlV6EC3qSMRfgua7wxfvakChh1sVTQ3eogWP7eH2a5q5jEP2KvW5A2v63+koPA89KBpEHVIdWpbCx8d2QKQxF0NpFIv/xaDUA=