index.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace app;
  3. require 'vendor/autoload.php';
  4. use Yansongda\Pay\Pay;
  5. class Alipay
  6. {
  7. protected $config = [
  8. // 必填-支付宝分配的 app_id
  9. 'app_id' => '2021003143625682',
  10. 'private_key' => 'MIIEpQIBAAKCAQEAv2ARMdNmQgJro35VUkoyxE7meNJm30xQz/6ZC/LhSgnmt0/104nLwFpMdXqwGwt0Qw227NUuyrTQMjvfBB/CkHLY2ZfR5OB1M9ed+Gam0cOJ23VVYsZuegHRrCE+/qSymq2DMYXMnHSplWT168ChtTzODsHK/EvHAep2T/UKeQk97X3ZMuNbH5FuKOohpEMfBZJ6gQV0CObD6bKLSjhUuYyrvx1AhFd4VZ01iYoAwtEntj9GTYY8xkHM3YTrce24QfXZbNOO/WkcNzoc04St2W1ROPgFpV7KoTPvuAANE6Z+hLmlpPn4Wvw6WLOcM9dYEs8ihswrVApr46xRhKF5lQIDAQABAoIBAC0i2ktXIboV2g9Af50d9OVJ+p+qeCrYVAMKeExSJ4KP3UOE72TKDi063ueiXSCzzeL2vBsVmKikhqoiZtIRL5FkFPMVFKMXsWzdwNtSUqwMo1oITXAzfuD1xt8DJFlovNswa03l0cFg3pJmsn28/CbDxZHDcT2aHcC87NSk5ahv9XHytCjMBu5Z2TgxjiWLm8g9RzERNeKd7QTmugBohDRDp7Bdvn6JYLHMIJ8h8zWTKDJ7lQKt3NnHNOjHknFubq8gNElteo9VHy0jqa4j6sS8Rmo0cVlKYODuA8VVEGwM2kYEvGuo13Ts/6WzCiF7MeRr6C2SUnnVTDpUb9rk8G0CgYEA+QAQjTax9i6ay/Efl0bCvDpzsxAd/WFBI+lNNT3zbcXOdSmjGTtfLULKFI4qh/uzUmEmzwX+dUsxFdILCSzl3i+J0V6Ih4Sfe/ShMKDl8OLYt/xgx1mKLdnRxRi4j7jSYt5OyKteodSMktmx38Qlwg51+E60ncuGte3IfM86NnsCgYEAxMFNmGCwQ6lrPN+3wOLMEbVB3fFzy3SfUiVmVNps33QAh06eD/YDOGv2+pH2YTfEBV5OyAgiA1eOJREh4shz6t+Ljw81N5Z43GSJJFivtz0NJsSqy0KtG+u48K6rDGILiTGa3o71kPXCReJeK/1ktxkJo/WBEa3y0yHq4h5Pmy8CgYEAoec12+wleNJC2rq09NMQyf0jv9mJ9nfnOCd5iVX303ebz7i8ESr2ruJPrV/nLbYumjELX+8gzjmO+AY0IMotyPOWJCnYkm1cmeeta4YjHScTDUav0s9Ytol8CTESyHi/a4PrLDWpeYZPxSiBrOLIPk7SzBq4/CUbOW4cP3MrAcMCgYEAiQLnCvZBqExg7doINpx4aNhkzq3l6ccDbwu2L96OtCguegqoDQtOgMrGCQT9ogNYUDi0+ZyYOuWMiYldpHPcLLGQmIWJlHUHIsorqhDMA/jSoK2RFcwPigLjHU80s4HO8LGHW/YHUPOiXlHdLBrfOJWJ3hAG2g3cq2PSEbXzz2cCgYEA48CoevQ8xLOuVxHnfda+5H803YIGins3HN86TD4PXg/ujg1Y8bfKe4gXQ1p/byG1lCDXIOZ8wR5dKqJt/ra8JHBXx/vBBCgX07dd9slrTnivxB5bQYQGuO2aXfIsgNtul5IlbfuMJVx2vgDysTwmq4av0qLkC+FxBV1h8JWXMdU=',
  11. // 必填-应用公钥证书 路径
  12. 'app_cert_public_key' => 'alipaycert/appCertPublicKey_2021003143625682.crt',
  13. // 必填-支付宝公钥证书 路径
  14. 'ali_public_key' => 'alipaycert/alipayCertPublicKey_RSA2.crt',
  15. // 必填-支付宝根证书 路径
  16. 'alipay_root_cert' => 'alipaycert/alipayRootCert.crt',
  17. 'return_url' => 'http://itaoniu.com.cn',
  18. 'notify_url' => 'http://itaoniu.com.cn/api/notify/alipay'
  19. // 选填-服务商模式下的服务商 id,当 mode 为 Pay::MODE_SERVICE 时使用该参数
  20. // 'service_provider_id' => '',
  21. // 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
  22. // 'mode' => Pay::MODE_NORMAL,
  23. ,
  24. 'logger' => [ // optional
  25. 'enable' => false,
  26. 'file' => './logs/alipay.log',
  27. 'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
  28. 'type' => 'single', // optional, 可选 daily.
  29. 'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
  30. ],
  31. 'http' => [ // optional
  32. 'timeout' => 5.0,
  33. 'connect_timeout' => 5.0,
  34. // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
  35. ],
  36. ];
  37. public function web()
  38. {
  39. $result = Pay::alipay($this->config)->web([
  40. 'out_trade_no' => ''.time(),
  41. 'total_amount' => '0.01',
  42. 'subject' => 'yansongda 测试 - 1',
  43. ]);
  44. return $result;
  45. }
  46. public function returnCallback()
  47. {
  48. $data = Pay::alipay($this->config)->callback(); // 是的,验签就这么简单!
  49. // 订单号:$data->out_trade_no
  50. // 支付宝交易号:$data->trade_no
  51. // 订单总金额:$data->total_amount
  52. }
  53. public function notifyCallback()
  54. {
  55. $alipay = Pay::alipay($this->config);
  56. try{
  57. $data = $alipay->callback(); // 是的,验签就这么简单!
  58. // 请自行对 trade_status 进行判断及其它逻辑进行判断,在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。
  59. // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
  60. // 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
  61. // 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email);
  62. // 4、验证app_id是否为该商户本身。
  63. // 5、其它业务逻辑情况
  64. } catch (\Exception $e) {
  65. // $e->getMessage();
  66. }
  67. return $alipay->success();
  68. }
  69. public function getPayInfo($outTradeNo, $price, $subject = '')
  70. {
  71. $order = [
  72. 'out_trade_no' => $outTradeNo,
  73. 'total_amount' => $price,
  74. 'subject' => $subject,
  75. //'http_method' => 'GET'
  76. ];
  77. $alipay = Pay::alipay($this->config)->wap($order);
  78. $retData = $alipay->getContent();
  79. // ErrorLog::saveMsg('aliPay请求支付参数', $retData, 1);
  80. return $retData;
  81. }
  82. public function getReturnInfo($outTradeNo, $trade_no,$price)
  83. {
  84. $order = [
  85. 'out_trade_no' => $outTradeNo,
  86. 'refund_amount' => $price,
  87. 'trade_no' => $trade_no,
  88. ];
  89. $alirefund=Pay::alipay($this->config)->refund($order);
  90. return $alirefund;
  91. }
  92. }
  93. if(empty($_REQUEST['op'])){
  94. echo json_encode(['code'=>3,'msg'=>'error']);
  95. die;
  96. }
  97. $op = $_REQUEST['op'];
  98. if($op=='getPayInfo'){
  99. try{
  100. $alipay = new Alipay();
  101. echo $alipay->getPayInfo($_REQUEST['outTradeNo'], $_REQUEST['price'], $_REQUEST['subject']);
  102. }catch(\Exception $e){
  103. echo json_encode(['code'=>2,'msg'=>$e->getMessage()]);
  104. }
  105. }elseif($op=='getReturnInfo'){
  106. try{
  107. $alipay = new Alipay();
  108. echo $alipay->getReturnInfo($_REQUEST['outTradeNo'], $_REQUEST['trade_no'], $_REQUEST['price']);
  109. }catch(\Exception $e){
  110. echo json_encode(['code'=>2,'msg'=>$e->getMessage()]);
  111. }
  112. }else{
  113. echo json_encode(['code'=>3,'msg'=>'error']);
  114. }