AliPay.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace App\Libs\Pay\Merchants;
  3. require_once dirname(__FILE__) . '../../../AliApp/aop/AopClient.php';
  4. require_once dirname(__FILE__) . '../../../AliApp/aop/request/AlipayTradeWapPayRequest.php';
  5. require_once dirname(__FILE__) . '../../../AliApp/aop/request/AlipayTradeAppPayRequest.php';
  6. require_once dirname(__FILE__) . '../../../AliApp/aop/request/AlipayTradeQueryRequest.php';
  7. class AliPay implements PayMerchantInterface
  8. {
  9. private $aop;
  10. const GATE_WAY_URL = 'https://openapi.alipay.com/gateway.do';
  11. const APPID = '2019102968728764';
  12. const RSAPRIVATEKEY = 'MIIEowIBAAKCAQEArQwM9Q9D/Ou8jkRfCEzwqm4nDSoyMxOobgqm7bqj9qvY+pRzLZFpTujfxYscdGRFPtBGQY3FehDI3SZBrX0PNAMgiXmVhPP7/qYBVsCmiEODlC2EjCVSau/BSwDderl746yUcvvZQhYicPyhpxzIK4wMQeChocsWIT9xJ9QHLmruoyeI9Av7gDRWtexOaeYcQtebVYV1K8PzvSfkRhCQHOg3kSXZzd0EgYHjTbudH+eVH1d5mJbx5ucvGNRY9rlUKw9MbkZTKqr4vdKvZvF9zHfKpAx+pzJCoXJmK+h6i6Lz77DpsGESucKtSAaSDbYrDQznYyPvxfW6paBV8voWxQIDAQABAoIBAE1ybj4jRedlTe9SNEIPxUpRoFKpBuyLKL+PLuSIuqdEhAip9d54DOyPFs9fki2ZTtBtAHSIUdBuwKcRXyWZKfu6Ro6ghsWJOMfgXgsIj7++j536vS7H6VoI0baSvY0WhJcB/zJy+uoz49gziNm07PVoaXf2ZAB4VwAsV6VepJQl8wl70oxw/Rgt33srTJfLQBFll9tDunyFXGA3WOLMpXR/l5l6y8R0EZDmLRBOvqhwbipOaCvdwAqAm3I/btplnwATQOYCWIAa+G04czetfzbUepLDaFAr48BjVYD11JKxB9WfIfY976NS0vUv2FMth5tuz0tQui+HOgFi6hw9GUUCgYEA9DcSqzRMOm8CeR57RMGoC5YNGZ2onGdK4qPKp0mE79R6FwV41fyLXsuer9JqxsIu1KoUoQnfE1G7FhNr1jrZPGbwuFpZabWq6K2Is9NOKOJV30wePA/esTLwQQJ/JzUpLEyv8UG9+r47AUvrKUjiqZydhFSR+dWXenvcbu9sMtcCgYEAtWXMcPYaJSHAhLkZOBAfw0mDbIcn0DzyReF7QLiGEqljhZR2IZzdg0dpQRfWCQEQl++33ch9RUzJGweiisPdtOX5F4/3FZTqEEn0q/fCTuXtpNzvtVLscGlORprR2NYSxIzRTUp6XrqrHRcl5VNR/AYZQMW58qetlUyStQ2868MCgYATo1IW/k+a605RmwfikYgH1nsbMjhay1uUOgOTzC+qcXWX4FLFMlequcj67nqznO3TIBIkmPydOxdGQS2MvpK1brmwuWMzQu6JY1r4yucgFoM9P4u23LfVm/kB4UeESZwT+d60EctLHHz2L7qrSTcg2H06JOrQIkLaEJe7O/mBZQKBgEwoaDQI7yMlz4kpmU/zXRKFe7sF545C+EikiTW8AvY0zcbYdNxZ2ppyUdt1YXQ4UToo994SfZ2pxkkl5HU0FJINd44P8GHMOpUKJ8JHa/nqCOMNq0pKfWAYpjd4aqAKCKkiogE8QrIg1xSIkm18lNAl01ZhbVdWVMd49aM0GFw3AoGBAJY56ndpBph/eruBdiKpSwxhGLs/QphrZHhTl62qOT1mhuVFP1JOd8T9WXjT8M4dL7+GPIXRS+64x4mPl1wwMNc74Lu3yzTOFl+2QIvFHPqwlEromhNaIzJAMBBJht49TDv/TpJRw7tWoEg8EsdVWJaXGUSlsPdslvLUPoNFH3g2';
  13. const ALIPAYRSAPUBLICKEY = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjL7j8uuK4HBDy4g/HG3rgpmpkzwfZrJj2FYOUCxGuiY+aTJHzJ1Ifrir89n+xc/1u+WgDs56Bt4MMamXp/IoekzfDzoCg+q5fr/Lb/F2a8qyn76RHUWrYdu38S1WpxqcgO7ILellQ1c2BCAGCDCdSr2EEIYCU4QmjuQ5Z1Ln8NSMJla8gkatwlZFdyWY2H6DGTLB+962bVruQ0mwV4aPTeJeywXbae5KiI713fEN/wVKzA8zX96SBt+XiRTbtIk/GL12tixbR4Q6C7pAND5vE8jm3PEz6xHX0G9myezVlx564Lk1vLg5mSMJ3qk91MW2n/oUvBgspk1kxuLzZDb1QIDAQAB';
  14. const SIGN_TYPE = 'RSA2';
  15. private $rsaPublicKeyFilePath;
  16. private $pay_merchant_id;
  17. public function __construct(array $config)
  18. {
  19. $this->aop = new \AopClient;
  20. $this->aop->appId = $config['app_id'];
  21. $this->aop->rsaPrivateKey = $config['pri_key'];
  22. $this->aop->alipayrsaPublicKey = $config['ali_pub_key'];
  23. $this->aop->signType = self::SIGN_TYPE;
  24. $this->aop->gatewayUrl = self::GATE_WAY_URL;
  25. $this->aop->format = 'json';
  26. }
  27. public function send(array $data)
  28. {
  29. $type = $data['type'];
  30. $params = [
  31. 'body' => $data['body'],
  32. 'subject' => $data['subject'],
  33. 'out_trade_no' => $data['out_trade_no'],
  34. 'timeout_express' => $data['timeout_express'],
  35. 'total_amount' => $data['total_amount'],
  36. 'product_code' => 'QUICK_WAP_WAY',
  37. 'passback_params' => urlencode($data['pay_merchant_id']),
  38. ];
  39. switch ($type) {
  40. case 'App':
  41. return $this->AlipayTradeAppPayRequest($data);
  42. break;
  43. case 'Wap':
  44. $return_url = $data['return_url'];
  45. return $this->AlipayTradeWapPayRequest($params, $return_url);
  46. break;
  47. }
  48. }
  49. private function AlipayTradeWapPayRequest(array $data, $return_url)
  50. {
  51. $request = new \AlipayTradeWapPayRequest();
  52. $request->setBizContent(json_encode($data));
  53. $request->setNotifyUrl(env('ALI_PAY_CALL_BACK'));
  54. $request->setReturnUrl($return_url);
  55. return $this->aop->pageExecute($request);
  56. }
  57. private function AlipayTradeAppPayRequest(array $data)
  58. {
  59. $request = new \AlipayTradeAppPayRequest();
  60. $request->setBizContent(json_encode($data));
  61. $request->setNotifyUrl(env('ALI_PAY_CALL_BACK'));
  62. return $this->aop->sdkExecute($request);
  63. }
  64. public function notify(array $data)
  65. {
  66. if (isset($data['sign']) && isset($data['trade_status']) && $data['trade_status'] == 'TRADE_SUCCESS') {
  67. return $this->aop->rsaCheckV1($data, $this->rsaPublicKeyFilePath, self::SIGN_TYPE);
  68. } else {
  69. return false;
  70. }
  71. }
  72. public function query(string $trade_no)
  73. {
  74. $request = new \AlipayTradeQueryRequest();
  75. $request->setBizContent(json_encode(['out_trade_no' => $trade_no]));
  76. $result = $this->aop->execute($request);
  77. $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
  78. $resultCode = $result->$responseNode->code;
  79. if (!empty($resultCode) && $resultCode == 10000) {
  80. return $result->$responseNode->trade_no;
  81. } else {
  82. return false;
  83. }
  84. }
  85. public function refund(array $data)
  86. {
  87. }
  88. public function makeSign(array $data)
  89. {
  90. }
  91. }