|
- <?php
-
- namespace backend\modules\api\logic;
-
- use backend\modules\api\models\OrderMain;
- use backend\modules\api\util\Util;
- use common\util\CurlInterface;
-
- class Sunshine
- {
-
-
- private $apiPath = [
- 'VerifyOrder' => '/sinosig_web/SyncInterface',
- 'CreateOrder' => '/sinosig_web/SyncInterface',
- 'CancelOrder' => '/sinosig_web/SyncInterface',
- ];
-
- private $sunshineConfig = null;
-
- private function sunshineConfig()
- {
- if ($this->sunshineConfig == null) {
- $this->sunshineConfig = \Yii::$app->params['sunshine_config'];
- }
- return $this->sunshineConfig;
- }
-
- /**
- * Function Description:阳光保险下单验证接口
- * Function Name: VerifyOrder
- * @param $par
- * @return array
- * @author fuhc
- */
- public function VerifyOrder($par)
- {
- $params = $this->getHttpParam($par);
- $resp = $this->sendCurl($params,'UNDERWRITE','VerifyOrder');
-
- if (!empty($resp['ORDER']['@attributes']['RETURN'])) {
- if($resp['ORDER']['@attributes']['RETURN']=='true'){
-
- return Util::returnArrSu('允许下单', $resp, '');
- }
- }
- return Util::returnArrEr('不允许下单', $resp, 'Sun-Verify-Order-Error');
- }
-
- /**
- * Function Description:阳光保险下单
- * Function Name: CreateOrder
- * @param $par
- * @return array
- * @author fuhc
- */
- public function CreateOrder($par)
- {
-
-
- $params = $this->getHttpParam($par);
-
- $resp = $this->sendCurl($params,'INSURE','CreateOrder');
-
- if (!empty($resp['ORDER']['@attributes']['RETURN'])) {
- if($resp['ORDER']['@attributes']['RETURN']=='true'){
-
- //获取保单号
- $POLICYNO = '';
- if(!empty($resp['ORDER']['POLICY']['@attributes']['POLICYNO'])){
- $POLICYNO = $resp['ORDER']['POLICY']['@attributes']['POLICYNO'];
- }
- $data = [];
- $data['policyno'] = $POLICYNO;
- $orderMain = new OrderMain();
- $result=$orderMain->updateInsuranceNo(['policyno'=>$POLICYNO,'order_id'=>$params['ORDER']['ORDERID']]);
- if($result===false){
- //失败
- }else{
- //成功
- }
- return Util::returnArrSu('下单成功', $data, '');
- }
- }
- return Util::returnArrEr('下单失败:', $resp, 'Sun-Create-Order-Error');
-
-
- }
-
- /**
- * Function Description:阳光保险退保
- * Function Name: CancelOrder
- * @param $params
- * @return array
- * @author fuhc
- */
- public function CancelOrder($params)
- {
- $resp = $this->sendCurl($params,'SURRENDER','CancelOrder');
- if (!empty($resp['ORDER']['@attributes']['RETURN'])) {
- if($resp['ORDER']['@attributes']['RETURN']=='true'){
-
- //获取保单号
- $POLICYNO = '';
- $data = [];
- if(!empty($resp['ORDER']['POLICY']['@attributes']['POLICYNO'])){
- $POLICYNO = $resp['ORDER']['POLICY']['@attributes']['POLICYNO'];
- $data['policyno'] = $POLICYNO;
- }else{
- return Util::returnArrSu('取消成功-保单号获取失败:', $data, 'Sun-Cancel-Order-Error01');
- }
-
- return Util::returnArrSu('取消成功', $data, '');
- }
- }
- return Util::returnArrEr('取消失败:', $resp, 'Sun-Cancel-Order-Error02');
- }
- /**
- * Function Description:下载保单
- * Function Name: EInsuranceForm
- * @param $params
- * @return array
- * @author fuhc
- */
- public function EInsuranceForm($params){
- $resp = $this->sendCurl($params,'EPOLICY','CancelOrder');
- if (!empty($resp['ORDER']['@attributes']['RETURN'])) {
- if($resp['ORDER']['@attributes']['RETURN']=='true'){
-
- return Util::returnArrSu('保单信息成功', $resp, '');
- }
- }
- return Util::returnArrEr('保单信息失败', $resp, 'Sun-E-InsuranceForm-Error01');
- }
- /*
- * 发送curl
- */
- private function sendCurl($params,$functionFlag,$apiPathKey){
- $httpBody = $this->setRequest($params, $functionFlag);
- $httpBody = http_build_query($httpBody);
- $curl = new CurlInterface($httpBody, 3);
- $sunshineConfig = $this->sunshineConfig();
- $api = $sunshineConfig['api'] . $this->apiPath[$apiPathKey];
- $curl->setHeader('Content-Type: application/x-www-form-urlencoded');
- $resp = $curl->execute($api, 'POST');
- return $resp;
- }
- /**
- * Des:设置传输报文
- * Name: setRequest
- * @param array $data
- * @param string $functionFlag
- * @return array
- * @author 倪宗锋
- */
- private function setRequest($data = [], $functionFlag = '')
- {
- $sunshineConfig = $this->sunshineConfig();
- $data['USERNAME'] = $sunshineConfig['username'];
- $data['PASSWORD'] = $sunshineConfig['password'];
- $param = [];
- $param['data'] = '<?xml version="1.0" encoding="GBK"?>' . Util::arrayToXml(['INSURENCEINFO' => $data]);
- $param['data'] = iconv('UTF-8', 'GBK', $param['data']);
- $param['sign'] = $this->setSign($param['data']);
- $param['functionFlag'] = $functionFlag;
- $param['interfaceFlag'] = 'JSHH';
- return $param;
- }
-
- /**
- * Des:设置加密函数
- * Name: setSign
- * @param $body
- * @return string
- * @author 倪宗锋
- */
- private function setSign($body)
- {
- $sunshineConfig = $this->sunshineConfig();
- $signString = $sunshineConfig['signkey'];
- $signString .= $body;
- return md5($signString);
- }
-
-
- /*
- * 获取请求参数
- */
- private function getHttpParam($par){
-
- $sunshineConfig = $this->sunshineConfig();
-
- $cardInfo = Util::getIDCardInfo($par['passenger_cardid']);
- $cardInfo_policy_holder = Util::getIDCardInfo($par['policy_holder_cardid']); //投保人身份证信息
-
- //联系人信息
- $CONTACTINFO = [];
- $CONTACTINFO['CONTACTNAME'] = $par['contacts_name']; //联系人姓名 必须
- $CONTACTINFO['CONTACTMOBILE'] = $par['contacts_phone']; //联系人手机号 必须
- $CONTACTINFO['CONTACTPHONE'] = $par['contacts_phone']; //联系人备用电话
- $CONTACTINFO['CONTACTEMAIL'] = ''; //联系人邮箱
-
-
- //INSURED
- $INSURED = [];
- $obj = [];
- $obj['INSUREDNAME'] = $par['passenger_name']; //被保人姓名
-
- $relationship = '';
- //投保人必须年满18周岁
- // 被保人小于10岁,投保人必须是父母
- // 被保人10-18岁,投保人必须是父母或具有赡养义务等关系的
- if($cardInfo['old']<18){
- $relationship = '62';
- }else{
- //大于=18岁 关系为本人 则投保人信息为被保人信息
- $par['policy_holder_name'] = $par['passenger_name'];
- $par['policy_holder_cardid'] = $par['passenger_cardid'];
- $cardInfo_policy_holder = $cardInfo;
- $relationship = '10';
- }
-
- $obj['RELATIONSHIP'] = $relationship; //投保人与被保人关系 10: 本人 62: 父母 99:其他
- $obj['INSUREDSEX'] = $cardInfo['sex']=='男'?'1':'2'; //被保人性别 性别为固定值:1:男;2:女
- $obj['INSUREDBIRTHDAY'] = $cardInfo['birthday']; //被保人出生日期 日期格式:yyyy-MM-dd
- $obj['INSUREDIDNO'] = $par['passenger_cardid']; //被保人证件号码
- $obj['INSUREDIDTYPE'] = '10'; //被保人证件类型
- $obj['INSUREDMOBILE'] = $par['contacts_phone']; //被保人手机号
- $obj['COUNTRY'] = 'CHN'; //国家
- $INSURED[]=$obj;
-
-
- $INSUREDLIST = [];
- $INSUREDLIST['INSURED'] = $INSURED;
-
- //POLICYINFO
- $POLICYINFO = [];
-
- $POLICYINFO['INSURSTARTDATE'] = $par['start_date'].' '.$par['start_time']; //客户指定的保险起期:格式yyyy-MM-dd HH:mm:ss
- $t_t = strtotime('+1 day',strtotime($POLICYINFO['INSURSTARTDATE'])-1); //客户指定的保险止期:格式yyyy-MM-dd HH:mm:ss
- $POLICYINFO['INSURENDDATE'] = date('Y-m-d H:i:s',$t_t);
- //计算开始与结束日期天数
- $days = round(((strtotime($POLICYINFO['INSURENDDATE'])+1) - strtotime($POLICYINFO['INSURSTARTDATE']))/3600/24);
-
- $prod_arr = $sunshineConfig['prod_arr'];
- $prod_type = $par['prod_type']; //1乘客意外险 2旅行意外险
- $prod_obj = [];
- if($prod_type==1) $prod_obj = $prod_arr['passengerAccidentInsurance']['QP120006'];
- if($prod_type==2) $prod_obj = $prod_arr['travelAccidentInsurance']['QP120276'];
- $POLICYINFO['PRODUCTCODE'] = $prod_obj['PRODUCTCODE']; //阳光提供产品唯一代码
- $POLICYINFO['PLANCODE'] =$prod_obj['PLANCODE'][$days-1]; //阳光提供保险计划编码唯一代码
- $POLICYINFO['INSURDATE'] = date('Y-m-d H:i:s'); //客户投保时系统时间:格式yyyy-MM-dd HH:mm:ss
-
- $POLICYINFO['INSURPERIOD'] = (string)$days; //保险期间
- $POLICYINFO['PERIODFLAG'] = 'D'; //保险期间单位 年为Y,月为M,日为D,例:保险期间为一个月,则INSURPERIOD=’1’,PERIODFLAG = ’M’
- $POLICYINFO['MULT'] = '1'; //购买份数
- $POLICYINFO['PREMIUM'] = $prod_obj['PREMIUM'] * $days; // 保费, 如是会员价或打折购买,该字段为原始保费计算方法为单价*购买份数
-
-
- $AMOUNT = 0;
- if($cardInfo['old']<=10){
- $AMOUNT = $prod_obj['AMOUNT'][0];
- }else{
- $AMOUNT = $prod_obj['AMOUNT'][1];
- }
-
- $POLICYINFO['AMOUNT'] =$AMOUNT*$POLICYINFO['MULT']; //保额, 计算方法为单份保额*购买份数
- $POLICYINFO['BENEFMODE'] = '0'; //受益模式,固定值:0:法定;1:指定;指定受益人时,受益人信息不能为空
- $POLICYINFO['PROVINCE'] = '上海'; //投保地省 可传入具体的省市名,如北京、天津
- $POLICYINFO['REGION'] = '上海'; //投保地:市/县 可传入具体的中文市/县名
- $POLICYINFO['APPNTNAME'] = $par['policy_holder_name']; // 投保人姓名
- $POLICYINFO['APPNTSEX'] = $cardInfo_policy_holder['sex']=='男'?'1':'2'; // 投保人性别 1男 2女
- $POLICYINFO['APPNTBIRTHDAY'] =$cardInfo_policy_holder['birthday']; //投保人出生日期 日期格式 yyyy-MM-dd
- $POLICYINFO['APPNTIDTYPE'] = '10'; //投保人证件类型
- $POLICYINFO['APPNTIDNO'] = $par['policy_holder_cardid']; // 投保人证件号码
- $POLICYINFO['APPNTADDRESS'] = ''; //投保人通讯地址
- $POLICYINFO['APPNTEMAIL'] = ''; // 投保人邮箱
- $POLICYINFO['APPNTMOBILE'] = $par['contacts_phone']; // 投保人手机
- $POLICYINFO['APPNTPHONE'] = $par['contacts_phone']; //投保人通讯电话
-
- $POLICYINFO['INSUREDLIST'] = $INSUREDLIST;
-
-
-
-
- $ORDER = [];
- $ORDER['ORDERID'] = $par['order_id'];
- //对方说不需要传支付信息
- // $ORDER['PAYTYPE'] = 'ALIPAY';
- // $ORDER['PAYTIME'] = '2018-03-08 11:33:21'; //支付时间yyyy-MM-dd HH:mm:ss
- // $ORDER['PAYID'] = '88888888888';
- // $ORDER['MERCHANTID'] = ''; //虚拟账户号
- // $ORDER['PayMoney'] = '5';
- $ORDER['CONTACTINFO'] = $CONTACTINFO;
- $ORDER['POLICYINFO'] = $POLICYINFO;
-
- $params['ORDER'] = $ORDER;
-
- return $params;
-
- }
-
-
- }
|