首先要定义接口 PayInterfaces
namespace App\Http\Interfaces;
interface PayInterfaces
{
public function pay($data);
}
建立总适配器
namespace App\Http\Adapter\Pay;
use App\Http\Interfaces\PayInterfaces;
class PayAdapter implements PayInterfaces
{
private $ad;
public function __construct($type)
{
$this->ad = $type;
}
public function pay($data)
{
return $this->ad->pay($data);
}
}
建立子适配器 需要什么建什么
namespace App\Http\Adapter\Pay;
use App\Http\Interfaces\PayInterfaces;
class HePayAdapter implements PayInterfaces
{
public function pay($data)
{
$pub_key = storage_path('rsa/rsa_public_key.pem');
$prv_key = storage_path('rsa/rsa_private_key.pem');
$obj = new \stdClass();
// TODO: Implement pay() method.
//支付接口
$he_pay_url = config('he.HE_PAY_URL');
$qianming = [
'uid' => $data['uid'],
'type' => $data['type'],
'amount' => $data['amount'],
];
ksort($qianming);
$key_str = http_build_query($qianming);
$keys = $key_str . '&secret=' . 'HEALTHSHOP' . date('Ymd', time());
$str_rsa = new \RSA($prv_key, $pub_key);
$key = $str_rsa->PrivSign($keys);
$order_pay_data = [
'uid' => $data['uid'],
'type' => $data['type'],
'amount' => $data['amount'],
'key' => encode($key)
];
$result = curl_post($he_pay_url, $order_pay_data);
$pay_status = json_decode($result);
//支付状态 1表示成功,
if(!$pay_status){
$obj->code = 0;
$obj->msg = '支付异常';
session()->flash('order-error', $obj);
return $obj;
}
if ($pay_status->code == -1) {
$obj->code = 0;
$obj->msg = $pay_status->msg;
session()->flash('order-error', $obj);
return $obj;
} else {
$obj->code = 1;
$obj->msg = $pay_status->msg;
session()->flash('order-error', $obj);
return $obj;
}
}
}
调用适配器
$pay_status = new PayAdapter(new HePayAdapter());
$pay_refund_status = $pay_status->pay($order_pay_data);
if(!$pay_refund_status){
$obj->code = 0;
$obj->msg = $pay_refund_status->msg;
session()->flash('order-error',$obj);
return false;
}