love_php/app/Services/AlipayService.php
2026-04-02 09:20:51 +08:00

168 lines
6.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Services;
use Omnipay\Omnipay;
use Illuminate\Http\Request;
class AlipayService
{
protected $love_app_id;
protected $love_pid;
protected $love_private_key;
protected $gateway;
public function __construct()
{
$notify_url = env('APP_URL').'/alipay/auth/callback';
$partner_id = '2021000195678447';
$private_key = '50hi4JBBgz1rDMUTZrJE9Q==';
$app_private_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCE/7cBh1xPS2yoVegckquCJcLUJ0ehZLOjfNWHH8DvuFhjJgiS0TuEzCDJ/8WDyfn7PaHawQsnQUXCyAEZ3KCemjA/vzS6VBnIP/VrXR32e3L8P691kp+1lzCRGrQi2pEVMOFEGr5QyOtXfbQbVMQlDFV0zOsVhxJNN1RD+PDh7Eq94uKleBOQykgfWrVscip+ksXaBf8z+rCatfHcemPmp9FB7XUfPm/g34bey7Hd+bP7f3nuq7PMcYfvRAx2RuVNPeTEz9j3jsq0pZahGAGux3K8GWuHZ17P0WbYFIgkTSJTDMq096LMix1ymRpBhdOG7QCMTZfNJuMswMboaJ9ZAgMBAAECggEAKIbLOxoGFNuE1p6mxd4jiNr8zSzS9Oj8nDqzziLs5Z8kv8GdJy++lS6mZycbBpeLJvWW1lOwlFudaEcNntXN08ZkIWigJo7t9EkY/Yg4Ux024op9arQtGmZhlDWw4lX7k5t7aQdFKtSucdCKCzH/OtLRT3AJyluIRiMv+C5pKE4ptvOswkZWRt40kGSVaCf2LWyMorb03pPzo0vJjMNXMhCFjjPrb+PRkHQA2bf6rfGPRtsr3pISApu5IcHZLNXm3T81jrsuVB7/rSqJuPPZbTvPDrxhgKz2s4MjRpEcsUwJnQF/E5LeguhITRqMK+7kNpr+tPeKtThZkZppxV/OAQKBgQDCJ1H89a06/J12IbzXBbmrOWCINlW2Sdz7MAVuvPWwlbaPSzQ4RZ5crGSJKgwFVZRJ+Cwi1us+QTilBva1NczsZFyQW5PiGU8HX0HySKdAM5K4kbpCDmWfYG2tBF/UpJlmQ0wANqJh654B2B8BiKegeNNi15qveNfSm3qWTUsEIQKBgQCvXWZrAd9mptVtEe7qG8mejp2QBnQDnqbLcyhV48uDsANwsYGoe5fNAOAx6NXfK3Qj/TE0xCVDGrLM8SKDPRqgcTl9dYFuU6FsKSJulpFjgKAfe1HNIpLYBCvtL0F9zoFed8EL25s+zgU+ZxYqyoTsqIfYNpsRZHKQWaOSuh40OQKBgCzTXTeVFUDIMCalFW9jkAF7RtFMEi/7D70i0i5GDEeP2U1uJIlVcYGd/7w3a/0TTCBj3vTQQBHohwZ6/BzMZhqx9TkTG6qZA0kFcjlZEtxcy+Q3KRS1NDs+zTOkDegPdKdKpFJsSsNm3d05I7d78I+5NbzdYIZg1Rt38C6he89hAoGBAJxglHjttZJrSTy21i7LUrJiiJyrNH8Z1bDs4tYciRnINnkiwPVGKSq1EjdPYpBcxndlS6C7HGNHhpP8n4MaVQknjlWTGDUSvIqf78Vf3Qw24hLQvDRKFVot9iHOlv8hy/k6ntn9HeYWf1STRpAoAfqrml+y6frLcOHKHXQ1JcP5AoGAYV0uWPrtptawbdQozI9QPNztYCPz93hMs4xER3u0sfyD10KrhrVGz1thDBukGLvek3FGO7LaIzXDkKKPPSee8knj2OMK92NMweLJog42qwpQCFSTD5ZRbqlutGKONf2X3AI1SEDFjPYouN/jAb5rnixvvjy7hFZn5GY7UXZa8IQ=";
$app_public_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjdHlN8FKF5SIGilCiGoMAwMDD1N812d2hOOSh3XXqAMBanFQEeBBAD7CDI7xFwaRhTiv8Uot0HR7VRnVjHHj8AA1IVlCg65LF0FiTmqeHmF1ghJn+b5n+8L7Wfw2Rk0Wz5p1Uui+7KZdoNY/6yj5El3z33y7UZtrYa37eOUBzTuj2rD16S7gONiAz0xjWG4U0u4OtJ+QEpJmoSGHx48gxLl8sY52Ske68oyIjRsUwAChu3rHFGZqyVnMFkeUGnZzkKLUm/MVqgotCi5cEIQGB8RLcyK1MNF+uij1coFNUgAIiQwV+XMSQ9COdKl2MApzEQyo+yYS9/JUK2yYelUcawIDAQAB';
$alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqz5kQlSk+fW0se/ls1JGBfUrCJSi4wDrWo9PiphEdNXOAM+PpiQ587nflCkbO7XXZ8MCbd2DZMMlSJQZnhlbxiRqMdGQoQABLvs1SVPeuKuN47rn99JmgNFu/XAnGCO6QK0hS35wG/BnTq5zjiNPbPiojrw6kDjROsgs75pnkAj8eW5YvRPXSVZyvLVBrN8WAh5uW3tSXtHAOzFl7CRxAccROfz3CnsS1oonw7QuxRhh/ktLApScqsa6kKbxsi59aacAK2n5DHY0UMsn8VMRr5Nr7hjy3FinuCb6lnYzzI0q0m3acEOMCzj3YaOM7GvtWxG4g8GUIaRLrpgH+mO65QIDAQAB";
//手机app支付
$gateway = Omnipay::create('Alipay_AopApp');
$gateway->setSignType('RSA2');
$gateway->setAppId($partner_id);
// $gateway->setSellerId($partner_id);
$gateway->setPrivateKey($app_private_key);
$gateway->setAlipayPublicKey($alipay_public_key);
$gateway->setNotifyUrl($notify_url);
$this->gateway = $gateway;
$this->love_app_id = '2021001147602775';
$this->love_pid = "2088731994488878";
$this->love_private_key = $app_private_key;
}
public function purchase($subject, $out_trade_no, $total_fee)
{
$total_fee = number_format($total_fee, 2);
$request = $this->gateway->purchase();
// $request->setBizContent([
// 'subject' => $subject,
// 'out_trade_no' => $out_trade_no,
// 'total_amount' => $total_fee,
// 'product_code' => 'QUICK_MSECURITY_PAY',
// ]);
$request->setBizContent([
'subject' => $subject,
'out_trade_no' => $out_trade_no, //date('YmdHis') . mt_rand(1000, 9999),
'total_amount' => $total_fee,
'product_code' => 'QUICK_MSECURITY_PAY',
]);
/**
* @var LegacyAppPurchaseResponse $response
*/
$response = $request->send();
$orderString = $response->getOrderString();
return $orderString;
// if ($orderString) {
// $result = $this->alipayReturn($orderString);
// return $result;
// }
}
public function alipayReturn(Request $request)
{
$data = $request->input('data');
$request = $this->gateway->completePurchase();
$request->setParams([
'memo' => '',
'result' => $data,
'resultStatus' => '9000'
]);
/**
* @var LegacyCompletePurchaseResponse $response
*/
try {
$response = $request->send();
if($response->isPaid()){
/**
* Payment is successful
*/
}else{
/**
* Payment is not successful
*/
}
} catch (Exception $e) {
/**
* Payment is not successful
*/
}
}
public function notify(Request $request)
{
// $tade_no = $request->
/**
* @var LegacyCompletePurchaseResponse $response
*/
try {
$response = $this->gateway->completePurchase()->setParams($_POST)->send();
} catch (InvalidRequestException $e) {
/**
* Payment is not successful
*/
die('fail');
}
if ($response->isPaid()) {
/** Payment is successful */
die('success'); //The response should be 'success' only
} else {
/** Payment is not successful */
die('fail');
}
}
/**
* InfoStr APP登录需要的的infostr
*
* @return String
*/
public function infoStr()
{
$infoStr = http_build_query([
'apiname' => 'com.alipay.account.auth',
'method' => 'alipay.open.auth.sdk.code.get',
'app_id' => $this->love_app_id,
'app_name' => '福恋智能',
'biz_type' => 'openservice',
'pid' => $this->love_pid,
'product_id' => 'APP_FAST_LOGIN',
'scope' => 'kuaijie',
'target_id' => mt_rand(999, 99999), //商户标识该次用户授权请求的ID该值在商户端应保持唯一
'auth_type' => 'AUTHACCOUNT', // AUTHACCOUNT代表授权LOGIN代表登录
'sign_type' => 'RSA2',
]);
$infoStr .= '&sign='.$this->enRSA2($infoStr);
return $infoStr;
}
/**
* enRSA2 RSA加密
*
* @param String $data
* @return String
*/
private function enRSA2($data)
{
$str = chunk_split(trim($this->love_private_key), 64, "\n");
$key = "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";
// $key = file_get_contents(storage_path('rsa_private_key.pem')); 为文件时这样引入
$signature = '';
$signature = openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256)?base64_encode($signature):NULL;
return $signature;
}
}