F2fpayController.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Components\Callback;
  4. use App\Http\Controllers\Controller;
  5. use Exception;
  6. use Illuminate\Http\Request;
  7. use InvalidArgumentException;
  8. use Log;
  9. use Payment\Client;
  10. use Payment\Exceptions\ClassNotFoundException;
  11. use Payment\Exceptions\GatewayException;
  12. class F2fpayController extends Controller
  13. {
  14. use Callback;
  15. // 接收GET请求
  16. public function index(Request $request)
  17. {
  18. Log::info("【支付宝当面付】回调接口[GET]:".var_export($request->all(), TRUE).'['.getClientIp().']');
  19. exit("【支付宝当面付】接口正常");
  20. }
  21. // 接收POST请求
  22. public function store(Request $request)
  23. {
  24. Log::info("【支付宝当面付】回调接口[POST]:".var_export($request->all(), TRUE));
  25. $aliConfig = [
  26. 'use_sandbox' => FALSE,
  27. 'app_id' => self::$systemConfig['f2fpay_app_id'],
  28. 'sign_type' => 'RSA2',
  29. 'ali_public_key' => self::$systemConfig['f2fpay_public_key'],
  30. 'rsa_private_key' => self::$systemConfig['f2fpay_private_key'],
  31. 'notify_url' => self::$systemConfig['website_url']."/api/f2fpay", // 异步回调接口
  32. 'return_url' => self::$systemConfig['website_url'],
  33. ];
  34. $data = [
  35. 'trade_no' => $request->input('out_trade_no'),
  36. 'transaction_id' => $request->input('trade_no'),
  37. ];
  38. // 使用
  39. try{
  40. $client = new Client(Client::ALIPAY, $aliConfig);
  41. $verify_result = $client->tradeQuery($data);
  42. Log::info("【支付宝当面付】回调验证查询:".var_export($verify_result, TRUE));
  43. } catch(InvalidArgumentException $e){
  44. Log::error("【支付宝当面付】回调信息错误: ".$e->getMessage());
  45. exit;
  46. } catch(GatewayException $e){
  47. Log::error("【支付宝当面付】建立支付错误: ".$e->getMessage());
  48. exit;
  49. } catch(ClassNotFoundException $e){
  50. Log::error("【支付宝当面付】未知类型: ".$e->getMessage());
  51. exit;
  52. } catch(Exception $e){
  53. Log::error("【支付宝当面付】错误: ".$e->getMessage());
  54. exit;
  55. }
  56. $result = "fail";
  57. if($verify_result['code'] == 10000 && $verify_result['msg'] == "Success"){ // 验证成功
  58. $result = "success";
  59. if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS'){
  60. // 商户订单号
  61. $data = [];
  62. $data['out_trade_no'] = $request->input('out_trade_no');
  63. // 支付宝交易号
  64. $data['trade_no'] = $request->input('trade_no');
  65. // 交易状态
  66. $data['trade_status'] = $request->input('trade_status');
  67. // 交易金额(这里是按照结算货币汇率的金额,和rmb_fee不相等)
  68. $data['total_amount'] = $request->input('total_amount');
  69. $this->tradePaid($data, 5);
  70. }else{
  71. Log::info('支付宝当面付-POST:交易失败['.getClientIp().']');
  72. }
  73. }else{
  74. Log::info('支付宝当面付-POST:验证失败['.getClientIp().']');
  75. }
  76. // 返回验证结果
  77. exit($result);
  78. }
  79. }