| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- <?php
- namespace addons\Happiness\common\service;
- use addons\Happiness\common\enums\HappinessEnum;
- use addons\Happiness\common\enums\HappinessPensionEnum;
- use addons\Happiness\common\models\HappinessOrder;
- use addons\Happiness\common\models\HappinessPension;
- use addons\Happiness\common\models\HappinessThirdUser;
- use common\enums\StatusEnum;
- use common\helpers\FormatHelper;
- use common\models\order\Order;
- use Yii;
- //养老金服务
- class PensionService extends BaseService
- {
- protected $url= 'https://pcpc.bjtdba.com/api/third/';//入账养老金
- protected $thirdKey = 'xingfuxiaodian';
- protected $thirdSignKey='xingfuxiaodian@86868.';
-
-
- //查询更改入账状态
- public function check($uid)
- {
-
- }
-
- public function jobSend($mall_id)
- {
- $list=HappinessPension::find()->where(['is_settle'=>StatusEnum::ENABLED,
- 'order_status'=>HappinessPensionEnum::NO_SEND,'mall_id'=>$mall_id])->asArray()->all();
- if(empty($list))
- {
- return;
- }
- $user_ids=array_column($list,'user_id');
- $third_users = HappinessThirdUser::find()->where(['user_id'=>$user_ids,'status'=>StatusEnum::ENABLED,'is_real'=>1,'type'=>1])
- ->asArray()->indexBy('user_id')->all();
- if(empty($third_users))
- {
- return;
- }
- $send_ids=[];
- foreach ($list as $order)
- {
- if(!isset($third_users[$order['user_id']]))
- {
- continue;
- }
- $res=$this->send($third_users[$order['user_id']]['third_id'],$order['money']);
- if($res===false)
- {
- Yii::error($this->error);
- }
- $send_ids[]=$order['id'];
- $main_order = HappinessOrder::getOne([['order_id' => $order['order_id']]],true);
- $service=new CommissionService();
- $res=$service->statsItem( [
- 'mall_id' => $mall_id,
- 'order_id' => $order['order_id'],
- 'order_no' => $order['order_no'],
- 'order_money' => $main_order['price'],
- 'user_id' => $order['user_id'],
- 'store_id' => $main_order['store_id'],
- 'money' => $order['money'],
- ],'pension_money');
- if($res===false)
- {
- throw new \Exception($service->error);
- }
- }
- if(!empty($send_ids))
- {
- HappinessPension::updateAll(['order_status'=>HappinessPensionEnum::IS_SEND],['in','id',$send_ids]);
- }
- return true;
-
- }
- public function record($order, $order_status)
- {
- //记录订单
- $findOrder=HappinessPension::find()->where(['order_id'=>$order['id']])->one();
- if($findOrder)
- {
- $findOrder->is_settle=StatusEnum::ENABLED;
- $findOrder->settle_time=time();
- $res=$findOrder->save();
- if($res===false)
- {
- $this->error = $findOrder->getErrorMessage();
- return false;
- }
- return true;
- }
- $setting = \Yii::$app->services->setting->addons->get($order['mall_id'], HappinessEnum::ADDONS_NAME, 'basic');
- $pension_scale = $setting['pension_scale'] ?? 0;
- if(empty($pension_scale))
- {
- $this->error = '请先设置养老金比例';
- return false;
- }
- $is_settle=StatusEnum::DISABLED;
- if($order_status==$setting['settlement_method'])
- {
- $is_settle=StatusEnum::ENABLED;
- }
- //查询是否有订单
- $pension_order=HappinessPension::find()->where(['order_no'=>$order['order_no']])->asArray()->one();
- if(!empty($pension_order))
- {
- $res = HappinessPension::setData([
- 'id'=>$pension_order['id'],
- 'is_settle'=>$is_settle
- ]);
- if($res === false)
- {
- $this->error=HappinessPension::getStaticError();
- return false;
- }
- }
- $money=bcmul($order['pay_money'],bcdiv($pension_scale,100,4),2);
- if($money<=0)
- {
- $this->error = '赠送金额为0';
- return false;
- }
- $data['user_id']=$order['user_id'];
- $data['mall_id']=$order['mall_id'];
- $data['order_id']=$order['id'];
- $data['order_no']=$order['order_no'];
- $data['order_status']=StatusEnum::DISABLED;
- $data['is_settle']=$is_settle;
- $data['settle_time']=0;
- $data['money']=$money;
- //查询是否有第三方平台账号
- $third=HappinessThirdUser::find()->where(['user_id'=>$order->user_id,'mall_id'=>$order->mall_id,
- 'status'=>StatusEnum::ENABLED,'type'=>1])->one();
- $data['uid']=$third?$third->third_id:0;
- $res=HappinessPension::setData($data);
- if($res===false)
- {
- $this->error = HappinessPension::getStaticError();
- Yii::error('赠送养老金失败');
- Yii::error($this->error);
- return false;
- }
- return true;
- }
- //入账养老金
- public function send($uid, $money)
- {
- //若未注册用户需要先注册用户并实名认证(一般在注册用户的时候会自动注册)
- //给予用户发送养老金
- try {
- $data=['uid'=>$uid,'pension'=>$money];
- $time=time();
- $sign=$this->sign($data,$time);
- $this->post($this->url.'gzc',$data,$sign,$time);
- return true;
- }
- catch (\Exception $e) {
- $exception = FormatHelper::exception($e, "养老金入账报错".$e->getFile());
- Yii::error($exception);
- $this->error = $e->getMessage();
- return false;
- }
- }
-
- //实名操作
- public function real($user_id,$uid,$user_name,$user_card,$card_positive,$card_reverse,$mobile)
- {
- try {
- $data=['uid'=>$uid,'user_name'=>$user_name,'user_card'=>$user_card,'mobile'=>$mobile,
- 'card_positive'=>$card_positive,'card_reverse'=>$card_reverse];
- $time=time();
- $sign=$this->sign($data,$time);
- $res=$this->post($this->url.'certification',$data,$sign,$time);
- if(isset($res['data']) && $res['data'])
- {
- //保存第三方信息
- $saveData=[
- 'type'=>1,
- 'user_id'=>$user_id,
- 'id_no'=>$user_card,
- 'is_real'=>1,
- 'id_img'=>$card_positive,
- 'id_back_img'=>$card_reverse,
- 'user_name' => $user_name,
- ];
- $res=HappinessThirdUser::setData($saveData);
- if($res===false)
- {
- $this->error=HappinessThirdUser::getStaticError();
- return false;
- }
- return true;
- }
- return false;
- }
- catch (\Exception $e) {
- $exception = FormatHelper::exception($e, "养老金实名报错".$e->getFile());
- Yii::error($exception);
- $this->error = $e->getMessage();
- return false;
- }
- }
- public function register($mobile,$mall_id,$user_id)
- {
- try {
- $data=['phone'=>$mobile,'spread'=>0];
- $time=time();
- $sign=$this->sign($data,$time);
- $res=$this->post($this->url.'register',$data,$sign,$time);
- if(isset($res['data']) && $res['data']['uid'])
- {
- //保存第三方信息
- $saveData=[
- 'uid'=>$res['data']['uid'],
- 'mall_id'=>$mall_id,
- 'type'=>1,
- 'user_id'=>$user_id
- ];
- $resSave=HappinessThirdUser::setData($saveData);
- if($resSave===false)
- {
- $this->error=HappinessThirdUser::getStaticError();
- return false;
- }
- return $res['data'];
- }
- $this->error='注册失败';
- return false;
-
- }
- catch (\Exception $e) {
- $exception = FormatHelper::exception($e, "养老金注册报错".$e->getFile());
- Yii::error($exception);
- $this->error = $e->getMessage();
- return false;
- }
- }
- protected function sign($data,$time)
- {
- //$data = [
- // 'phone' => 15210999641,
- // 'spread' =>0,
- //];
- ksort($data);
- $params = '';
- foreach ($data as $key => $value) {
- $params .= '&' . $key . '=' . $value;
- }
- $params = ltrim($params, '&');
- $sign=strtoupper(md5($params . '&key=' . $this->thirdKey . '&signKey=' . $this->thirdSignKey . '×tamp=' . $time));
- return $sign;
- }
- protected function post($url,$data,$sign,$time)
- {
- $curl = curl_init();
- curl_setopt_array($curl, [
- CURLOPT_URL => $url,
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_ENCODING => "",
- CURLOPT_MAXREDIRS => 10,
- CURLOPT_TIMEOUT => 30,
- CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
- CURLOPT_CUSTOMREQUEST => "POST",
- CURLOPT_POSTFIELDS => $data,
- CURLOPT_HTTPHEADER => [
- "key: $this->thirdKey",
- "sign: $sign",
- "timestamp: $time"
- ],
- ]);
- $response = curl_exec($curl);
- $err = curl_error($curl);
- curl_close($curl);
- if ($err) {
- throw new \Exception('curl错误:' . $err);
- } else {
- Yii::error('养老金返回信息');
- Yii::error($response);
- $result = json_decode($response,true);
- if (isset($result['status']) && $result['status'] != '200') {
- throw new \Exception($result['message']);
- }
- return $result;
- }
- }
-
- public static function cancel($order_id)
- {
- HappinessPension::updateAll(['order_status'=>HappinessPensionEnum::CANCEL],['order_id'=>$order_id]);
- }
- }
|