| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php
- namespace addons\HuifuPay\common\service;
- use addons\HuifuPay\common\models\HuifuPayFastpayOrder;
- use addons\HuifuPay\common\models\HuifuPayOrderModel;
- use addons\HuifuPay\common\models\HuifuPayUserBankcard;
- use addons\HuifuPay\common\service\HuifuService;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use common\models\common\PaymentTrade;
- use common\models\common\UserBankCard;
- use yii\db\Exception;
- use \Yii;
- class FastPayService extends PayService
- {
- public $config = [];
- public $mall_id = 0;
- public $public_key='';
- public function __construct($mall_id = null)
- {
- if (!empty($mall_id)) {
- $this->mall_id = $mall_id;
- $this->config = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_HUIFU_PAY, 'basic');
-
- }
- }
- /**
- * 快捷支付-发送签约短信
- * @desc 签约第一步
- * @param int $card_id UserBankCard->id
- * @throws Exception
- * @return bool
- */
- public function sendSignSms($card_id)
- {
- $card = HuifuPayUserBankcard::findOne(['card_id' => $card_id]);
- if (!$card) {
- throw new Exception('银行卡信息不存在');
- }
- $order_id = HuifuPayFastpayOrder::createOrder($card->mall_id, $card->user_id, $card_id, 0.01);
- $orderInfo = HuifuPayFastpayOrder::findOne(['id' => $order_id]);
- $data=[
- 'user_id'=>$card->user_id,
- 'huifu_id'=>$this->config['huifupay_huifu_id'],
- 'order_no'=>$orderInfo->order_no,
- 'bank_card_no'=>$card->bank_card_no,
- 'payer_name'=>$card->payer_name,
- 'id_no'=>$card->id_no,
- 'is_longer'=>$card->is_longer,
- 'sdate'=>$card->sdate,
- 'edate'=>$card->edate,
- 'mobile_no'=>$card->mobile_no,
- ];
- $huifuService=new HuifuService($card->mall_id);
- $result= $huifuService->signCard($data);
- if(isset($result['trans_id']))
- {
- $orderInfo->hf_order_no=$result['trans_id'];
- $orderInfo->save();
- }
- return $result;
- }
-
- /**
- * 快捷支付-签约
- * @desc 签约第二步 END
- * @param $card_info
- * @param $sms_code
- * @throws Exception
- * @return bool
- */
- public function sign($card_id, $sms_code)
- {
- $card_info = UserBankCard::findOne([
- 'id' => $card_id,
- 'status' => StatusEnum::ENABLED,
- ]);
- /** @var HuifuPayUserBankcard $card_info */
- $huifupay_card_info = HuifuPayUserBankcard::findOne([
- 'card_id' => $card_id,
- 'status' => StatusEnum::ENABLED,
- 'is_sign' => 0,
- ]);
- if (empty($card_info) || empty($huifupay_card_info)) throw new \Exception('银行卡不存在');
- /** @var HuifuPayFastpayOrder $orderInfo */
- $orderInfo = HuifuPayFastpayOrder::find()
- ->where(['bank_card_id' => $card_info->id,'user_id'=>$card_info->user_id])
- ->orderBy('id desc')
- ->one();
- if (empty($orderInfo)) throw new \Exception('签约订单未找到');
- $data=[
- 'user_id'=>$huifupay_card_info->user_id,
- 'huifu_id'=>$this->config['huifupay_huifu_id'],
- 'order_no'=>$orderInfo->order_no,
- 'bank_card_no'=>$huifupay_card_info->bank_card_no,
- 'payer_name'=>$huifupay_card_info->payer_name,
- 'id_no'=>$huifupay_card_info->id_no,
- 'is_longer'=>$huifupay_card_info->is_longer,
- 'sdate'=>$huifupay_card_info->sdate,
- 'edate'=>$huifupay_card_info->edate,
- 'mobile_no'=>$huifupay_card_info->mobile_no,
- 'trans_id'=>$orderInfo->hf_order_no,
- 'code'=>$sms_code
- ];
- $huifuService=new HuifuService($card_info->mall_id);
- $result= $huifuService->confirmBindSms($data);
- if(isset($result['token_no'])&&$result['trans_status']=='S')
- {
- $huifupay_card_info->sign_no = $result['token_no'] ?? '';
- $huifupay_card_info->is_sign = !empty($result['token_no']) ? 1 : 0;
- $huifupay_card_info->cust_id=$result['cust_id'];
- $huifupay_card_info->updated_at = time();
- if(!$huifupay_card_info->save()){
- throw new Exception($huifupay_card_info->getErrorMessage());
- }
- $orderInfo->updated_at = time();
- if(!$orderInfo->save()){
- throw new Exception($orderInfo->getErrorMessage());
- }
- return true;
- }
- return false;
- }
- /**
- * 解约
- * @param $card_info
- * @return bool
- * @throws Exception
- */
- public function unsign($card_info)
- {
- try {
- if (!$card_info->sign_no) { // 未签约(直接解绑)
- $card_info->is_sign = 0;
- if (!$card_info->save()) {
- throw new Exception($card_info->getErrorMessage());
- }
- return true;
- }
- $bankInfo = [
- 'huifu_id' => $this->config['huifupay_huifu_id'],
- 'user_id' => $card_info->user_id,
- 'sign_no' => $card_info->sign_no,
- ];
- $huifuService = new HuifuService($card_info['mall_id']);
- $result = $huifuService->unbindBankCard($bankInfo);
- if (!$result) {
- throw new Exception('解约失败');
- }
- $card_info->is_sign = 0;
- if (!$card_info->save()) {
- throw new Exception($card_info->getErrorMessage());
- }
- } catch (\Exception $e) {
- throw new Exception($e->getMessage());
- }
- return true;
- }
- /**
- * 支付短信接口
- * @param $trade_id 支付流水id
- * @param $card_id 银行卡记录id
- * @throws Exception
- * @return bool
- */
- public function sendPaySms(int $trade_id, $card_info, $mall_id)
- {
- $trade = PaymentTrade::find()
- ->select('*,out_trade_no as order_no')
- ->where(['id' => $trade_id])
- ->one();
-
- $order_setting = \Yii::$app->services->setting->mall->get($mall_id, 'order');
- $order_auto_handle_time = 30;
- if (!empty($order_setting)) {
- $order_auto_handle_time = $order_setting['payment_expire_time'];
- }
- $expireDate = time() + ($order_auto_handle_time * 60);
- $huifuService = new HuifuService($trade->mall_id);
- $notify_url = \Yii::$app->services->setting->platform->get('system.api_url') . "/huifu-pay/notify/notify2";
- $result = [];
- //分账对象
- $splitAccount = [];
- if ($this->config['huifupay_ledger_status'] && !empty(json_decode($this->config['huifupay_ledger_list'], true))) {
- $sList = json_decode($this->config['huifupay_ledger_list'], true);
- foreach ($sList as $key => $value) {
- $scale = bcdiv($value['num'], 100);
- $price = bcmul($trade->pay_fee, $scale, 2);
- $item = [
- 'num' => $price,
- 'id' => $value['id']
- ];
- $splitAccount[] = $item;
- }
- }
- // 发送快捷支付短信
- $data = [
- 'cust_id' => $card_info->cust_id,
- 'amount' => $trade->pay_fee,
- 'huifu_id' => $this->config['huifupay_huifu_id'],
- 'sign_no'=>$card_info->sign_no,
- 'delay_acct_flag' => PayService::getSplitAccount($trade)
- ];
- $huifuService=new HuifuService($mall_id);
- $expireDate = time() + (91 * 60);
- $result = $huifuService->sendPaySms($data, $notify_url, $expireDate, $splitAccount);
- if($result)
- {
- //添加记录
- $order = new HuifuPayOrderModel();
- $order->mall_id = $trade->mall_id;
- $order->hf_order_no = $result['req_seq_id']; //汇付流水号
- $order->trade_no = $trade->out_trade_no;
- $order->created_at = time();
- $order->updated_at = time();
- $order->payment_id = $trade->id;
- $order->trade_type = 'fast_pay';
- $order->save();
- $trade->trade_type='fast_pay';
- $trade->save();
- }
- return $result;
- }
- }
|