PensionService.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <?php
  2. namespace addons\Happiness\common\service;
  3. use addons\Happiness\common\enums\HappinessEnum;
  4. use addons\Happiness\common\enums\HappinessPensionEnum;
  5. use addons\Happiness\common\models\HappinessOrder;
  6. use addons\Happiness\common\models\HappinessPension;
  7. use addons\Happiness\common\models\HappinessThirdUser;
  8. use common\enums\StatusEnum;
  9. use common\helpers\FormatHelper;
  10. use common\models\order\Order;
  11. use Yii;
  12. //养老金服务
  13. class PensionService extends BaseService
  14. {
  15. protected $url= 'https://pcpc.bjtdba.com/api/third/';//入账养老金
  16. protected $thirdKey = 'xingfuxiaodian';
  17. protected $thirdSignKey='xingfuxiaodian@86868.';
  18. //查询更改入账状态
  19. public function check($uid)
  20. {
  21. }
  22. public function jobSend($mall_id)
  23. {
  24. $list=HappinessPension::find()->where(['is_settle'=>StatusEnum::ENABLED,
  25. 'order_status'=>HappinessPensionEnum::NO_SEND,'mall_id'=>$mall_id])->asArray()->all();
  26. if(empty($list))
  27. {
  28. return;
  29. }
  30. $user_ids=array_column($list,'user_id');
  31. $third_users = HappinessThirdUser::find()->where(['user_id'=>$user_ids,'status'=>StatusEnum::ENABLED,'is_real'=>1,'type'=>1])
  32. ->asArray()->indexBy('user_id')->all();
  33. if(empty($third_users))
  34. {
  35. return;
  36. }
  37. $send_ids=[];
  38. foreach ($list as $order)
  39. {
  40. if(!isset($third_users[$order['user_id']]))
  41. {
  42. continue;
  43. }
  44. $res=$this->send($third_users[$order['user_id']]['third_id'],$order['money']);
  45. if($res===false)
  46. {
  47. Yii::error($this->error);
  48. }
  49. $send_ids[]=$order['id'];
  50. $main_order = HappinessOrder::getOne([['order_id' => $order['order_id']]],true);
  51. $service=new CommissionService();
  52. $res=$service->statsItem( [
  53. 'mall_id' => $mall_id,
  54. 'order_id' => $order['order_id'],
  55. 'order_no' => $order['order_no'],
  56. 'order_money' => $main_order['price'],
  57. 'user_id' => $order['user_id'],
  58. 'store_id' => $main_order['store_id'],
  59. 'money' => $order['money'],
  60. ],'pension_money');
  61. if($res===false)
  62. {
  63. throw new \Exception($service->error);
  64. }
  65. }
  66. if(!empty($send_ids))
  67. {
  68. HappinessPension::updateAll(['order_status'=>HappinessPensionEnum::IS_SEND],['in','id',$send_ids]);
  69. }
  70. return true;
  71. }
  72. public function record($order, $order_status)
  73. {
  74. //记录订单
  75. $findOrder=HappinessPension::find()->where(['order_id'=>$order['id']])->one();
  76. if($findOrder)
  77. {
  78. $findOrder->is_settle=StatusEnum::ENABLED;
  79. $findOrder->settle_time=time();
  80. $res=$findOrder->save();
  81. if($res===false)
  82. {
  83. $this->error = $findOrder->getErrorMessage();
  84. return false;
  85. }
  86. return true;
  87. }
  88. $setting = \Yii::$app->services->setting->addons->get($order['mall_id'], HappinessEnum::ADDONS_NAME, 'basic');
  89. $pension_scale = $setting['pension_scale'] ?? 0;
  90. if(empty($pension_scale))
  91. {
  92. $this->error = '请先设置养老金比例';
  93. return false;
  94. }
  95. $is_settle=StatusEnum::DISABLED;
  96. if($order_status==$setting['settlement_method'])
  97. {
  98. $is_settle=StatusEnum::ENABLED;
  99. }
  100. //查询是否有订单
  101. $pension_order=HappinessPension::find()->where(['order_no'=>$order['order_no']])->asArray()->one();
  102. if(!empty($pension_order))
  103. {
  104. $res = HappinessPension::setData([
  105. 'id'=>$pension_order['id'],
  106. 'is_settle'=>$is_settle
  107. ]);
  108. if($res === false)
  109. {
  110. $this->error=HappinessPension::getStaticError();
  111. return false;
  112. }
  113. }
  114. $money=bcmul($order['pay_money'],bcdiv($pension_scale,100,4),2);
  115. if($money<=0)
  116. {
  117. $this->error = '赠送金额为0';
  118. return false;
  119. }
  120. $data['user_id']=$order['user_id'];
  121. $data['mall_id']=$order['mall_id'];
  122. $data['order_id']=$order['id'];
  123. $data['order_no']=$order['order_no'];
  124. $data['order_status']=StatusEnum::DISABLED;
  125. $data['is_settle']=$is_settle;
  126. $data['settle_time']=0;
  127. $data['money']=$money;
  128. //查询是否有第三方平台账号
  129. $third=HappinessThirdUser::find()->where(['user_id'=>$order->user_id,'mall_id'=>$order->mall_id,
  130. 'status'=>StatusEnum::ENABLED,'type'=>1])->one();
  131. $data['uid']=$third?$third->third_id:0;
  132. $res=HappinessPension::setData($data);
  133. if($res===false)
  134. {
  135. $this->error = HappinessPension::getStaticError();
  136. Yii::error('赠送养老金失败');
  137. Yii::error($this->error);
  138. return false;
  139. }
  140. return true;
  141. }
  142. //入账养老金
  143. public function send($uid, $money)
  144. {
  145. //若未注册用户需要先注册用户并实名认证(一般在注册用户的时候会自动注册)
  146. //给予用户发送养老金
  147. try {
  148. $data=['uid'=>$uid,'pension'=>$money];
  149. $time=time();
  150. $sign=$this->sign($data,$time);
  151. $this->post($this->url.'gzc',$data,$sign,$time);
  152. return true;
  153. }
  154. catch (\Exception $e) {
  155. $exception = FormatHelper::exception($e, "养老金入账报错".$e->getFile());
  156. Yii::error($exception);
  157. $this->error = $e->getMessage();
  158. return false;
  159. }
  160. }
  161. //实名操作
  162. public function real($user_id,$uid,$user_name,$user_card,$card_positive,$card_reverse,$mobile)
  163. {
  164. try {
  165. $data=['uid'=>$uid,'user_name'=>$user_name,'user_card'=>$user_card,'mobile'=>$mobile,
  166. 'card_positive'=>$card_positive,'card_reverse'=>$card_reverse];
  167. $time=time();
  168. $sign=$this->sign($data,$time);
  169. $res=$this->post($this->url.'certification',$data,$sign,$time);
  170. if(isset($res['data']) && $res['data'])
  171. {
  172. //保存第三方信息
  173. $saveData=[
  174. 'type'=>1,
  175. 'user_id'=>$user_id,
  176. 'id_no'=>$user_card,
  177. 'is_real'=>1,
  178. 'id_img'=>$card_positive,
  179. 'id_back_img'=>$card_reverse,
  180. 'user_name' => $user_name,
  181. ];
  182. $res=HappinessThirdUser::setData($saveData);
  183. if($res===false)
  184. {
  185. $this->error=HappinessThirdUser::getStaticError();
  186. return false;
  187. }
  188. return true;
  189. }
  190. return false;
  191. }
  192. catch (\Exception $e) {
  193. $exception = FormatHelper::exception($e, "养老金实名报错".$e->getFile());
  194. Yii::error($exception);
  195. $this->error = $e->getMessage();
  196. return false;
  197. }
  198. }
  199. public function register($mobile,$mall_id,$user_id)
  200. {
  201. try {
  202. $data=['phone'=>$mobile,'spread'=>0];
  203. $time=time();
  204. $sign=$this->sign($data,$time);
  205. $res=$this->post($this->url.'register',$data,$sign,$time);
  206. if(isset($res['data']) && $res['data']['uid'])
  207. {
  208. //保存第三方信息
  209. $saveData=[
  210. 'uid'=>$res['data']['uid'],
  211. 'mall_id'=>$mall_id,
  212. 'type'=>1,
  213. 'user_id'=>$user_id
  214. ];
  215. $resSave=HappinessThirdUser::setData($saveData);
  216. if($resSave===false)
  217. {
  218. $this->error=HappinessThirdUser::getStaticError();
  219. return false;
  220. }
  221. return $res['data'];
  222. }
  223. $this->error='注册失败';
  224. return false;
  225. }
  226. catch (\Exception $e) {
  227. $exception = FormatHelper::exception($e, "养老金注册报错".$e->getFile());
  228. Yii::error($exception);
  229. $this->error = $e->getMessage();
  230. return false;
  231. }
  232. }
  233. protected function sign($data,$time)
  234. {
  235. //$data = [
  236. // 'phone' => 15210999641,
  237. // 'spread' =>0,
  238. //];
  239. ksort($data);
  240. $params = '';
  241. foreach ($data as $key => $value) {
  242. $params .= '&' . $key . '=' . $value;
  243. }
  244. $params = ltrim($params, '&');
  245. $sign=strtoupper(md5($params . '&key=' . $this->thirdKey . '&signKey=' . $this->thirdSignKey . '&timestamp=' . $time));
  246. return $sign;
  247. }
  248. protected function post($url,$data,$sign,$time)
  249. {
  250. $curl = curl_init();
  251. curl_setopt_array($curl, [
  252. CURLOPT_URL => $url,
  253. CURLOPT_RETURNTRANSFER => true,
  254. CURLOPT_ENCODING => "",
  255. CURLOPT_MAXREDIRS => 10,
  256. CURLOPT_TIMEOUT => 30,
  257. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  258. CURLOPT_CUSTOMREQUEST => "POST",
  259. CURLOPT_POSTFIELDS => $data,
  260. CURLOPT_HTTPHEADER => [
  261. "key: $this->thirdKey",
  262. "sign: $sign",
  263. "timestamp: $time"
  264. ],
  265. ]);
  266. $response = curl_exec($curl);
  267. $err = curl_error($curl);
  268. curl_close($curl);
  269. if ($err) {
  270. throw new \Exception('curl错误:' . $err);
  271. } else {
  272. Yii::error('养老金返回信息');
  273. Yii::error($response);
  274. $result = json_decode($response,true);
  275. if (isset($result['status']) && $result['status'] != '200') {
  276. throw new \Exception($result['message']);
  277. }
  278. return $result;
  279. }
  280. }
  281. public static function cancel($order_id)
  282. {
  283. HappinessPension::updateAll(['order_status'=>HappinessPensionEnum::CANCEL],['order_id'=>$order_id]);
  284. }
  285. }