AlipayController.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace app\api\controller\pay;
  3. use app\api\controller\Log;
  4. use Yansongda\Pay\Pay;
  5. class AlipayController
  6. {
  7. protected $config = [
  8. 'app_id' => '2021004155613207',
  9. 'notify_url' => 'http://yansongda.cn/notify.php',
  10. 'return_url' => 'http://yansongda.cn/return.php',
  11. 'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmlAp3QIQuDVJqQP5C+33LO6P5D9OOGXszClHNH/5Iep+/A+00vhLaSc9izgxV8XTWpqHcss/gGYfmjNtpDwF0RS1po6J7dTg8d6UJtqaNGCEMUc/r/+Jo+zrmSeoFRdwb5a+tIPC2xb58qrRuL4wYpvzSAwr9DNveKO30RJT3cXX98sYMs6gWhXOz5jBGFUlYQZ5WB1Nx8HM39spW7/QNINX0y4Wqqp0reWieMRE1aKrV9Fb4ehrJ3nDm64KHWfRw/g3Me9FvqkP03dkfPT4hykeHfWTUbuh+ifTjGMcVLxBnBX74vnNzk9zwn9l+UUuEg/1RbMcEF5ppMnt/Kog6wIDAQAB',
  12. // 加密方式: **RSA2**
  13. 'private_key' => 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCaUCndAhC4NUmpA/kL7fcs7o/kP044ZezMKUc0f/kh6n78D7TS+EtpJz2LODFXxdNamodyyz+AZh+aM22kPAXRFLWmjont1ODx3pQm2po0YIQxRz+v/4mj7OuZJ6gVF3Bvlr60g8LbFvnyqtG4vjBim/NIDCv0M294o7fRElPdxdf3yxgyzqBaFc7PmMEYVSVhBnlYHU3Hwczf2ylbv9A0g1fTLhaqqnSt5aJ4xETVoqtX0Vvh6GsnecObrgodZ9HD+Dcx70W+qQ/Td2R89PiHKR4d9ZNRu6H6J9OMYxxUvEGcFfvi+c3OT3PCf2X5RS4SD/VFsxwQXmmkye38qiDrAgMBAAECggEAE3EgJSE6fAryseG3QgKETtvrsyUqtL5avEpDF2E8QUKrJxTPgnkX/zKbdWvqA5YAD/1CLXtgD8xOFP5/xN5vGS2TyV1SEW3tvWt+nPqTzR+P6CmC46i9bbLO6Cfv7GBcoSKL+nBTX4kgiqts6urDa9kcKKqn6weD9t4hrayydlFhiXGT+zUtnkZobJIWmzG+ZLjusn/wp4vyQyXQGnjyiEmzCHab/n8hLfPR9d/3mfG/rj/mIJ9630H+mstMTGoZxDKobeC+k5HQpICyY9bbmug7IgZtqHCO0xou8tpinMRmk/wRD/Bg4XIDdAYgGucb0rpRvbI9KxgGpzpGFXFkuQKBgQDdY/eMdrwnH13XQT4l+ZrjEi7fkCTFvmfafJy1G55feFK9k+YmX7UXtcbw/bc59CqjIL/bpkYy1t+0SrB0eywGvMFBD3G3EZQnQmFmHW7bAba3pTcEoVlyhm9Oz9igvbpI1fZmaeqE+9DOVlWwtcLjhpBh/wuHP5KgyfWKBqwrBQKBgQCyb8PgKklTNFS7iHKBKTIx/ES4xZBSej/Q/lLY0ZGc2LTTGn2HxmmbcJIH5fR4+opOGSGsXc/vfp2pGk1yq42rRVVjUG7Y68J2VpIjELQ8SNbSK+4YqS8VI+Kez0m7ZDEWTwxMRbQTiCaBRUwGhjkReLyLrfXmz5Syxaf7rBg/LwKBgQDE4eQCDI2jFSf1B9ZnGyT9DuyUcLHjEUN2cB9EiH09VdnvMhoYwkBgB44WPuu1JEjOrY8xnRsMlz52LX3i+K7chvwuCbgNIBrrFwNbNo2hQlLl2o2lFoBfcuKF6h0yRcfmgjEQPt0Kyo6VEP4/mkTo5oB8Rb5Q1t5lE3XC+9AcqQKBgEJDENkguuQEDecqL2NZegNn69k1vHd0YFhq6TcM8+br7pJqRu1xt+v6LLB0K4n1eACygnewyrPkMAYI93O60zwj3iaoStGRE0DAuzn8TQIKBoQ7vgo4YXyXO+O/lGDbPwNKzYVRaSLLr4jXw/i0RWMAk/vG2QciVNTiY5Qo/0QPAoGANqq2RacHmcevwp3S3iXfHGxb8kfG90aGDtTr9AY965IGmy4ckKEZJ5+XkhH8Yi+YYWyIkTpgsSQUCDoBSvQ7FBSFnYn5CcX8MIpsx833DpGEK4PMeje0q/rbQ4P1/gOgvgICGWJsOYkzooFhX+TVGXCXE4EE3E471GadQOhy3EQ=',
  14. 'log' => [ // optional
  15. 'file' => './logs/alipay.log',
  16. 'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
  17. 'type' => 'single', // optional, 可选 daily.
  18. 'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
  19. ],
  20. 'http' => [ // optional
  21. 'timeout' => 5.0,
  22. 'connect_timeout' => 5.0,
  23. // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
  24. ],
  25. // 'mode' => 'dev', // optional,设置此参数,将进入沙箱模式
  26. ];
  27. public function index()
  28. {
  29. $order = [
  30. 'out_trade_no' => time(),
  31. 'total_amount' => '0.01',
  32. 'subject' => 'test subject-测试订单',
  33. ];
  34. $alipay = Pay::alipay($this->config)->app($order);
  35. return $alipay->send();// laravel 框架中请直接 `return $alipay`
  36. }
  37. public function return()
  38. {
  39. $data = Pay::alipay($this->config)->verify(); // 是的,验签就这么简单!
  40. // 订单号:$data->out_trade_no
  41. // 支付宝交易号:$data->trade_no
  42. // 订单总金额:$data->total_amount
  43. }
  44. public function notify()
  45. {
  46. $alipay = Pay::alipay($this->config);
  47. try {
  48. $data = $alipay->verify(); // 是的,验签就这么简单!
  49. // 请自行对 trade_status 进行判断及其它逻辑进行判断,在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。
  50. // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
  51. // 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
  52. // 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email);
  53. // 4、验证app_id是否为该商户本身。
  54. // 5、其它业务逻辑情况
  55. Log::debug('Alipay notify', $data->all());
  56. } catch (\Exception $e) {
  57. // $e->getMessage();
  58. }
  59. return $alipay->success()->send();// laravel 框架中请直接 `return $alipay->success()`
  60. }
  61. private function getConfig()
  62. {
  63. return [
  64. 'alipay' => [
  65. 'default' => [
  66. // 必填-支付宝分配的 app_id
  67. 'app_id' => '2021004155613207',
  68. // 必填-应用私钥 字符串或路径
  69. // 在 https://open.alipay.com/develop/manage 《应用详情->开发设置->接口加签方式》中设置
  70. 'app_secret_cert' => 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCaUCndAhC4NUmpA/kL7fcs7o/kP044ZezMKUc0f/kh6n78D7TS+EtpJz2LODFXxdNamodyyz+AZh+aM22kPAXRFLWmjont1ODx3pQm2po0YIQxRz+v/4mj7OuZJ6gVF3Bvlr60g8LbFvnyqtG4vjBim/NIDCv0M294o7fRElPdxdf3yxgyzqBaFc7PmMEYVSVhBnlYHU3Hwczf2ylbv9A0g1fTLhaqqnSt5aJ4xETVoqtX0Vvh6GsnecObrgodZ9HD+Dcx70W+qQ/Td2R89PiHKR4d9ZNRu6H6J9OMYxxUvEGcFfvi+c3OT3PCf2X5RS4SD/VFsxwQXmmkye38qiDrAgMBAAECggEAE3EgJSE6fAryseG3QgKETtvrsyUqtL5avEpDF2E8QUKrJxTPgnkX/zKbdWvqA5YAD/1CLXtgD8xOFP5/xN5vGS2TyV1SEW3tvWt+nPqTzR+P6CmC46i9bbLO6Cfv7GBcoSKL+nBTX4kgiqts6urDa9kcKKqn6weD9t4hrayydlFhiXGT+zUtnkZobJIWmzG+ZLjusn/wp4vyQyXQGnjyiEmzCHab/n8hLfPR9d/3mfG/rj/mIJ9630H+mstMTGoZxDKobeC+k5HQpICyY9bbmug7IgZtqHCO0xou8tpinMRmk/wRD/Bg4XIDdAYgGucb0rpRvbI9KxgGpzpGFXFkuQKBgQDdY/eMdrwnH13XQT4l+ZrjEi7fkCTFvmfafJy1G55feFK9k+YmX7UXtcbw/bc59CqjIL/bpkYy1t+0SrB0eywGvMFBD3G3EZQnQmFmHW7bAba3pTcEoVlyhm9Oz9igvbpI1fZmaeqE+9DOVlWwtcLjhpBh/wuHP5KgyfWKBqwrBQKBgQCyb8PgKklTNFS7iHKBKTIx/ES4xZBSej/Q/lLY0ZGc2LTTGn2HxmmbcJIH5fR4+opOGSGsXc/vfp2pGk1yq42rRVVjUG7Y68J2VpIjELQ8SNbSK+4YqS8VI+Kez0m7ZDEWTwxMRbQTiCaBRUwGhjkReLyLrfXmz5Syxaf7rBg/LwKBgQDE4eQCDI2jFSf1B9ZnGyT9DuyUcLHjEUN2cB9EiH09VdnvMhoYwkBgB44WPuu1JEjOrY8xnRsMlz52LX3i+K7chvwuCbgNIBrrFwNbNo2hQlLl2o2lFoBfcuKF6h0yRcfmgjEQPt0Kyo6VEP4/mkTo5oB8Rb5Q1t5lE3XC+9AcqQKBgEJDENkguuQEDecqL2NZegNn69k1vHd0YFhq6TcM8+br7pJqRu1xt+v6LLB0K4n1eACygnewyrPkMAYI93O60zwj3iaoStGRE0DAuzn8TQIKBoQ7vgo4YXyXO+O/lGDbPwNKzYVRaSLLr4jXw/i0RWMAk/vG2QciVNTiY5Qo/0QPAoGANqq2RacHmcevwp3S3iXfHGxb8kfG90aGDtTr9AY965IGmy4ckKEZJ5+XkhH8Yi+YYWyIkTpgsSQUCDoBSvQ7FBSFnYn5CcX8MIpsx833DpGEK4PMeje0q/rbQ4P1/gOgvgICGWJsOYkzooFhX+TVGXCXE4EE3E471GadQOhy3EQ=',
  71. // 必填-应用公钥证书 路径
  72. // 设置应用私钥后,即可下载得到以下3个证书
  73. 'app_public_cert_path' => config_path('cert/alipay/appCertPublicKey.crt'),
  74. // 必填-支付宝公钥证书 路径
  75. 'alipay_public_cert_path' => config_path('cert/alipay/alipayCertPublicKey_RSA2.crt'),
  76. // 必填-支付宝根证书 路径
  77. 'alipay_root_cert_path' => config_path('cert/alipay/alipayRootCert.crt'),
  78. // 回调地址
  79. 'return_url' => 'https://xxx.cn/api/pay/alipay/return',
  80. // 通知地址
  81. 'notify_url' => 'https://xxx.cn/api/pay/alipay/notify',
  82. // 选填-第三方应用授权token
  83. 'app_auth_token' => '',
  84. // 选填-服务商模式下的服务商 id,当 mode 为 Pay::MODE_SERVICE 时使用该参数
  85. 'service_provider_id' => '',
  86. // 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
  87. 'mode' => Pay::MODE_NORMAL,
  88. ]
  89. ]
  90. ];
  91. }
  92. }