123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- <?php
- /**
- * Created by PayBeaver <merchant.paybeaver.com>
- * Version: 2020-12-06.
- */
- namespace App\Http\Controllers\Gateway;
- use Auth;
- use Http;
- use Illuminate\Http\JsonResponse;
- use Log;
- use Response;
- class PayBeaver extends AbstractPayment
- {
- private $appId;
- private $appSecret;
- private $url = 'https://api.citipay.net/api/v1/developer';
- public function __construct()
- {
- $this->appId = sysConfig('paybeaver_app_id');
- $this->appSecret = sysConfig('paybeaver_app_secret');
- }
- public function purchase($request): JsonResponse
- {
- $payment = $this->creatNewPayment(Auth::id(), $request->input('id'), $request->input('amount'));
- $result = $this->createOrder($payment);
- //Log::alert('$this->createOrder【海狸支付】创建订单错误:'.var_export($result, true));
- if (isset($result['message'])) {
- // Log::alert('【海狸支付】创建订单错误:'.$result['message']);
- return Response::json(['status' => 'fail', 'message' => '创建订单失败:'.$result['message']]);
- }
- if (! isset($result['data']['pay_url'])) {
- // Log::alert('【海狸支付】创建订单错误:未获取到支付链接'.var_export($result, true));
- return Response::json(['status' => 'fail', 'message' => '创建订单失败:未知错误']);
- }
- $payment->update(['url' => $result['data']['pay_url']]);
- return Response::json(['status' => 'success', 'url' => $result['data']['pay_url'], 'message' => '创建订单成功!']);
- }
- private function post($data)
- {
- $curl = curl_init();
- curl_setopt($curl, CURLOPT_URL, $this->url . '/v1/gateway/fetch');
- curl_setopt($curl, CURLOPT_HEADER, 0);
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
- curl_setopt($curl, CURLOPT_POST, 1);
- curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
- $data = curl_exec($curl);
- curl_close($curl);
- return $data;
- }
- private function createOrder($payment)
- {
- $params = [
- 'out_trade_no' => $payment->trade_no,
- 'total_amount' => $payment->amount * 100,
- 'notify_url' => route('payment.notify', ['method' => 'paybeaver']),
- 'return_url' => route('invoice'),
- ];
- $params['app_id'] = $this->appId;
- ksort($params);
- $str = http_build_query($params) . $this->appSecret;
- $params['sign'] = md5($str);
- $response = $this->post(http_build_query($params));
- Log::info('【海狸支付】订单放回结果:'.var_export($response, true));
- $response = json_decode($response,true);
- if (!isset($response['data'])) {
- Log::info('【海狸支付】创建订单失败:'.var_export(['code' => -1, 'msg' => '支付网关处理失败'], true));
- return ['status' => 'fail', 'message' => '获取失败!请检查配置信息'];
- }
- return $response;
- }
- private function sign($params)
- {
- // if (isset($params['sign'])) {
- // unset($params['sign']);
- // }
- ksort($params);
- return md5(http_build_query($params).$this->appSecret);
- }
- public function notify($request): void
- {
- Log::info('【海狸支付】回调接口:'.var_export($request->all(), true));
- if (! $this->paybeaverVerify($request->post())) {
- exit(json_encode(['status' => 400]));
- }
- if ($request->has(['out_trade_no']) && $this->paymentReceived($request->input(['out_trade_no'])) ) {
- $this->addPamentCallback($request->input('out_trade_no'),$request->input('trade_no'),$request->input('money'));
- Log::info('【海狸支付】paymentReceived:'.var_export($request->all(), true));
- exit(json_encode(['status' => 200]));
- }
- exit(json_encode(['status' => 500]));
- }
- private function paybeaverVerify($params)
- {
- $sign = $params['sign'];
- unset($params['sign']);
- ksort($params);
- reset($params);
- $str = http_build_query($params) . $this->appSecret;
- return $sign === md5($str);
- //return hash_equals($params['sign'], $this->sign($params));
- }
- }
|