$this->mini_id, 'is_delete' => 0]); if($model && $model->template_id){ $form = new AlipayThirdForm(); $form->mini_id = $this->mini_id; $apires = $form->AlipayMarketingCardTemplateQuery($model->template_id); if($apires['code'] !== 0){ \Yii::error([__METHOD__, $apires]); return $apires; } } if($model){ $model->card_action_list = json_decode($model->card_action_list, true); $model->column_info_list = json_decode($model->column_info_list, true); $model->template_benefit_info = json_decode($model->template_benefit_info, true); $model->open_card_conf_card_rights = json_decode($model->open_card_conf_card_rights, true); } return [ 'code' => 0, 'msg' => 'ok', 'apires' => $apires, 'data' => $model, ]; } //创建 public function tempCreate($params = [], $id = 0, $update = 1) { $t = \Yii::$app->db->beginTransaction(); $model = $id ? AlipayCardTemp::findOne($id) : new AlipayCardTemp(); if($update || $params['card_show_name']){ $model->mini_id = $this->mini_id; $model->store_id = $this->store_id; $model->card_show_name = $params['card_show_name']; $model->logo_id = $params['logo_id']; $model->background_id = $params['background_id']; $model->column_info_list_point = $params['column_info_list_point']; $model->column_info_list_balance = $params['column_info_list_balance']; $model->card_action_list = json_encode($params['card_action_list']); $model->column_info_list = json_encode($params['column_info_list']); $model->template_benefit_info = json_encode($params['template_benefit_info']); $model->open_card_conf_card_rights = json_encode($params['open_card_conf_card_rights']); $model->join_benefit_id = $params['join_benefit_id']; if(!$model->save()){ $t->rollBack(); return [ 'code' => 1, 'msg' => array_shift($model->getFirstErrors()), ]; } } $form = new AlipayThirdForm(); $form->mini_id = $this->mini_id; $biz_content = $this->tempModelToBiz($model); $res = $form->AlipayMarketingCardTemplateCreate($biz_content, $model->template_id); if($res['code'] !== 0){ \Yii::error([__METHOD__, $res]); $t->rollBack(); return $res; } $template_id = $res['data']->template_id; $model->template_id = $template_id; $model->save(); $t->commit(); //开卡表单 $res2 = $form->AlipayMarketingCardFormtemplateSet($model->template_id); if($res2['code'] !== 0){ \Yii::error([__METHOD__, $res2]); $t->rollBack(); return $res2; } return $res; } public function tempModelToBiz($model) { $biz_content = [ 'spi_app_id' => '2018xxxxxxx', 'request_id' => md5(microtime()), 'card_type' => 'OUT_MEMBER_CARD', 'biz_no_suffix_len' => '8', 'write_off_type' => 'qrcode', 'template_style_info' => [ 'card_show_name' => $model->card_show_name, 'logo_id' => $model->logo_id, 'background_id' => $model->background_id, 'bg_color' => 'rgb(0,159,252)', // 'front_text_list_enable' => 'true', // 'feature_descriptions' => [ // '特色信息,用于领卡预览', // '使用花呗卡可享受免费分期', // ], // 'slogan' => '标语权益享不停', // 'brand_name' => '品牌商名称', 'column_info_layout' => 'list', //list/grid ], ]; if($model->column_info_list_point){ $biz_content['column_info_list'][] = [ 'code' => 'POINT', 'title' => '积分', ]; $biz_content['field_rule_list'][] = [ 'field_name' => 'Point', 'rule_name' => 'ASSIGN_FROM_REQUEST', 'rule_value' => 'Point', ]; } if($model->column_info_list_balance){ $biz_content['column_info_list'][] = [ 'code' => 'BALANCE', 'title' => '余额', ]; $biz_content['field_rule_list'][] = [ 'field_name' => 'Balance', 'rule_name' => 'ASSIGN_FROM_REQUEST', 'rule_value' => 'Balance', ]; } foreach(json_decode($model->column_info_list, true) as $i => $item){ $biz_content['column_info_list'][] = [ 'code' => 'column_info_list_code_' . $i, 'title' => $item['title'], 'value' => $item['value'], 'operate_type' => 'openWeb', 'more_info' => [ 'title' => $item['title'], 'url' => $item['url']['link'], ], 'icon_id' => $model->logo_id, ]; } foreach(json_decode($model->card_action_list, true) as $i => $item){ $display_on_list = $i < 2 ? 'true' : 'false'; $biz_content['card_action_list'][] = [ 'code' => 'card_action_list_code_' . $i, 'text' => $item['title'], 'url_type' => 'miniAppUrl', 'mini_app_url' => [ 'mini_app_id' => '2018xxxxxxx', 'mini_page_param' => $item['url']['link'], 'display_on_list' => $display_on_list, ] ]; } foreach(json_decode($model->template_benefit_info, true) as $i => $item){ $biz_content['template_benefit_info'][] = [ 'title' => $item['title'], 'benefit_desc' => [$item['benefit_desc']], 'start_date' => '2016-07-18 15:17:23', 'end_date' => '2116-07-18 15:17:23', ]; } $biz_content['open_card_conf'] = [ 'open_card_source_type' => 'ISV', 'source_app_id' => '2018xxxxxxx', 'open_card_url' => 'https://www.alipay.com', ]; foreach(json_decode($model->open_card_conf_card_rights, true) as $i => $item){ $biz_content['open_card_conf']['card_rights'][] = [ 'title' => $item['title'], 'detail' => $item['detail'], 'logo_id' => $item['logo_id'], ]; } return $biz_content; } public function spi_alipay_user_opencard_get($params) { /** $_POST = [ 'user_id' => '2088902351536970' 'user_info' => '[{\'OPEN_FORM_FIELD_GENDER\':\'男\'},{\'OPEN_FORM_FIELD_MOBILE\':\'13888888888\'},{\'OPEN_FORM_FIELD_NAME\':\'李四\'}]' 'out_serial_no' => '1621923366000' 'biz_card_no' => '000001' 'template_id' => '20200312000000000414103000300846' 'out_string' => 'test' ] * */ $temp = AlipayCardTemp::findOne(['template_id' => $params['template_id']]); $user = User::findOne(['alipay_open_id' => $params['user_id'], 'store_id' => $temp->store_id]); $card = AlipayCard::findOne(['template_id' => $temp->template_id, 'alipay_open_id' => $params['user_id']]); \Yii::error([__METHOD__, $card, ['template_id' => $temp->template_id, 'alipay_open_id' => $params['user_id']]]); if(!$card){ $card = new AlipayCard(); $card->mini_id = $temp->mini_id; $card->store_id = $temp->store_id; $card->template_id = $temp->template_id; $card->alipay_open_id = $params['user_id'] ?: ''; $card->biz_card_no = $params['biz_card_no']; $card->external_card_no = $params['biz_card_no']; $card->out_string = $params['out_string'] ?: ''; $card->open_date = date('Y-m-d H:i:s'); $card->valid_date = '2100-12-12 00:00:00'; } $card->is_delete = 0; \Yii::error([__METHOD__, $params['user_info'], json_decode($params['user_info'], true)]); $user_info = json_decode($params['user_info'], true); if(json_last_error()){ $params['user_info'] = str_replace("'", '"', $params['user_info']); $user_info = json_decode($params['user_info'], true); } \Yii::error([__METHOD__, $user_info]); if($user_info){ foreach($user_info as $item){ if(isset($item['OPEN_FORM_FIELD_MOBILE'])){ $card->mobile = $item['OPEN_FORM_FIELD_MOBILE']; } if(isset($item['OPEN_FORM_FIELD_NAME'])){ $card->name = $item['OPEN_FORM_FIELD_NAME']; } } } if(!$card->save()){ \Yii::error([__METHOD__, $card]); return [ 'code' => 1, 'msg' => array_shift($card->getFirstErrors()), ]; } $res = [ "response" => [ "code" => "10000", "msg" => "Success", "card_info" => [ "biz_card_no" => $card['biz_card_no'], "external_card_no" => $card['external_card_no'], "open_date" => $card['open_date'], "valid_date" => $card['valid_date'], "point" => $user->integral, "balance" => $user->money, "template_id" => $card['template_id'], "front_text_list" => [ [ "label" => "专业", "value" => "金融贸易" ] ], ], // "open_card_ext_info" => [ // "is_new_member" => true, // "activity_id" => "12345" // ] ], "sign" => "ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE", ]; return $res; } public function apiCardQuery($card) { $form = new AlipayThirdForm(); $form->mini_id = $this->mini_id; $res = $form->AlipayMarketingCardQuery($card->biz_card_no); if($res['code'] !== 0){ \Yii::error([__METHOD__, $res]); } return $res; } public function cardInfoByUser($user) { $card = AlipayCard::findOne(['alipay_open_id' => $user['alipay_open_id'], 'store_id' => $this->store_id, 'mini_id' => $this->mini_id]); $apires = $this->apiCardQuery($card); return [ 'code' => 0, 'msg' => 'ok', 'card' => $card, 'apires' => $apires, ]; } public function cardList($params = []) { $query = AlipayCard::find()->where(['is_delete' => 0, 'store_id' => $this->store_id]); $this->mini_id && $query->andWhere(['mini_id' => $this->mini_id]); $params['name'] && $query->andWhere(['name' => $params['name']]); $params['mobile'] && $query->andWhere(['mobile' => $params['mobile']]); if($params['nickname']){ $userQuery = (new Query())->select('alipay_open_id')->from(User::tableName())->where(['store_id' => $this->store_id])->andWhere(['like', 'nickname', $params['nickname']]); $query->andWhere(['alipay_open_id' => $userQuery]); } $list = pagination_make($query); foreach ($list['list'] as &$item) { $user = User::findOne(['alipay_open_id' => $item['alipay_open_id'], 'store_id' => $this->store_id]); $item['user'] = $user; $item['point'] = $user->integral; $item['balance'] = $user->money; } return [ 'code' => 0, 'msg' => 'ok', 'data' => $list, // 'sql' => $query->createCommand()->getRawSql(), ]; } //更新积分、余额 public function cardUpdate($id) { $card = AlipayCard::findOne($id); $user = User::findOne(['alipay_open_id' => $card['alipay_open_id'], 'store_id' => $card['store_id']]); if(!$user){ return [ 'code' => 0, 'msg' => '无需同步,没有查到系统会员信息', ]; } $form = new AlipayThirdForm(); $form->mini_id = $this->mini_id; $card_info = [ 'biz_card_no' => $card->biz_card_no, 'external_card_no' => $card->external_card_no, 'open_date' => $card->open_date, 'valid_date' => $card->valid_date, 'point' => $user->integral, 'balance' => $user->money, 'template_id' => $card->template_id, ]; $res = $form->AlipayMarketingCardUpdate($card->biz_card_no, $card_info); if($res['code'] !== 0){ \Yii::error([__METHOD__, $res]); } return $res; } public function cardUpdateByOpenid($openid) { try{ $card = AlipayCard::findOne(['alipay_open_id' => $openid, 'store_id' => $this->store_id]); if(!$card){ return; } $this->mini_id = $card->mini_id; return $this->cardUpdate($card->id); } catch (\Exception $e) { \Yii::error([__METHOD__, $e]); } } public function cardDel($id) { $card = AlipayCard::findOne($id); $card->is_delete = 1; if(!$card->save()){ \Yii::error([__METHOD__, $card]); return [ 'code' => 1, 'msg' => array_shift($card->getFirstErrors()), ]; } $form = new AlipayThirdForm(); $form->mini_id = $this->mini_id; $res = $form->AlipayMarketingCardDelete($card->biz_card_no); if($res['code'] !== 0){ \Yii::error([__METHOD__, $res]); } return $res; } }