diff --git a/app/Payments/AlipayF2F.php b/app/Payments/AlipayF2F.php new file mode 100644 index 00000000..12fe91b7 --- /dev/null +++ b/app/Payments/AlipayF2F.php @@ -0,0 +1,96 @@ +config = $config; + } + + public function form() + { + return [ + 'app_id' => [ + 'label' => '支付宝APPID', + 'description' => '', + 'type' => 'input', + ], + 'private_key' => [ + 'label' => '支付宝私钥', + 'description' => '', + 'type' => 'input', + ], + 'public_key' => [ + 'label' => '支付宝公钥', + 'description' => '', + 'type' => 'input', + ] + ]; + } + + public function pay($order) + { + $gateway = Omnipay::create('Alipay_AopF2F'); + $gateway->setSignType('RSA2'); //RSA/RSA2 + $gateway->setAppId($this->config['app_id']); + $gateway->setPrivateKey($this->config['private_key']); // 可以是路径,也可以是密钥内容 + $gateway->setAlipayPublicKey($this->config['public_key']); // 可以是路径,也可以是密钥内容 + $gateway->setNotifyUrl($order['notify_url']); + $request = $gateway->purchase(); + $request->setBizContent([ + 'subject' => config('v2board.app_name', 'V2Board') . ' - 订阅', + 'out_trade_no' => $order['trade_no'], + 'total_amount' => $order['total_amount'] / 100 + ]); + /** @var \Omnipay\Alipay\Responses\AopTradePreCreateResponse $response */ + $response = $request->send(); + $result = $response->getAlipayResponse(); + if ($result['code'] !== '10000') { + abort(500, $result['sub_msg']); + } + return [ + 'type' => 0, // 0:qrcode 1:url + 'data' => $response->getQrCode() + ]; + } + + public function notify($params) + { + $gateway = Omnipay::create('Alipay_AopF2F'); + $gateway->setSignType('RSA2'); //RSA/RSA2 + $gateway->setAppId($this->config['app_id']); + $gateway->setPrivateKey($this->config['private_key']); // 可以是路径,也可以是密钥内容 + $gateway->setAlipayPublicKey($this->config['public_key']); // 可以是路径,也可以是密钥内容 + $request = $gateway->completePurchase(); + $request->setParams($_POST); //Optional + try { + /** @var \Omnipay\Alipay\Responses\AopCompletePurchaseResponse $response */ + $response = $request->send(); + if ($response->isPaid()) { + /** + * Payment is successful + */ + return [ + 'trade_no' => $params['out_trade_no'], + 'callback_no' => $params['trade_no'] + ]; + } else { + /** + * Payment is not successful + */ + return false; + } + } catch (\Exception $e) { + /** + * Payment is not successful + */ + return false; + } + } +}