123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- <?php
- /**
- * Quhulian.php UTF-8
- * huosdk_mini_program
- *
- * @date : 2019/3/21 13:56
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : chenbingling <cbl@huosdk.com>
- * @version : HUOSDK 8.0
- */
- namespace huomp\controller\cpa_reversal;
- use huo\controller\common\Base;
- use huolib\constant\MemConst;
- use huolib\tool\StrUtils;
- use huomp\model\agent\AgentAdsCfgModel;
- use huomp\model\log\LogAdsQuhulianModel;
- use think\Log;
- class Quhulian extends Base {
- private $url = ''; //异步地址
- private $key = ''; //密钥
- /***
- * 趣互联异步通知
- *
- * @param $data
- *
- * @return bool
- */
- public function QuhulianNotify($data) {
- if (MemConst::MEMBER_OLD == $data['status']) {
- return $this->insertLog($data);
- }
- if (empty($data['openid_m']) || empty($data['device_id'])) {
- return true;
- }
- if (empty($data['agent_id'])) {
- Log::write(
- 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($data).'&msg=缺少渠道参数',
- Log::ERROR
- );
- return false;
- }
- $_rs = $this->getAgentCfg($data['agent_id']);
- if (false == $_rs) {
- Log::write(
- 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($data).'&rs='
- .json_encode($_rs).'&msg=缺少渠道参数', Log::ERROR
- );
- return false;
- }
- $_param = $this->setParam($data);
- $_i = 0;
- $_return = false;
- while (1) {
- $_i++;
- $_rs = $this->curlBack($this->url, $_param);
- if ($_rs > 0) {
- $_return = true;
- $this->insertLog($data);
- break;
- } else {
- sleep(1);
- }
- if ($_i == 3) {
- break;
- }
- }
- return $_return;
- }
- /**
- * 插入记录
- *
- * @param $data
- *
- * @return bool
- */
- public function insertLog($data) {
- $_data = [
- 'mp_id' => get_val($data, 'mp_id'),
- 'openid' => get_val($data, 'openid'),
- 'openid_m' => get_val($data, 'openid_m'),
- 'device_id' => get_val($data, 'device_id'),
- 'mem_id' => get_val($data, 'mem_id', 0),
- 'status' => get_val($data, 'status', 1),
- ];
- $_rs = (new LogAdsQuhulianModel())->addData($_data);
- if (false == $_rs) {
- Log::write(
- 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode([$data, $_data]).'&rs='
- .json_encode($_rs), Log::ERROR
- );
- }
- return $_rs;
- }
- /**
- * 获取配置信息
- *
- * @param $agent_id
- *
- * @return bool
- */
- public function getAgentCfg($agent_id) {
- $_cfg = (new AgentAdsCfgModel())->getInfoByAgentId($agent_id);
- if (empty($_cfg)) {
- return false;
- }
- if (empty($_cfg['back_url']) || empty($_cfg['key'])) {
- return false;
- }
- $this->url = $_cfg['back_url'];
- $this->key = $_cfg['key'];
- return true;
- }
- /**
- * 设置回调参数
- *
- * @param array $data
- *
- * @return bool|string
- */
- public function setParam($data = []) {
- $_rq_data['openid_m'] = get_val($data, 'openid_m');
- $_rq_data['openid_x'] = get_val($data, 'openid');
- $_rq_data['appid'] = get_val($data, 'mp_id');
- $_rq_data['device_id'] = get_val($data, 'device_id');
- $_param = StrUtils::argSort($_rq_data);
- $_sign_str = StrUtils::createLinkString($_param);
- $_sign = strtoupper(md5($_sign_str."&key=".$this->key));
- $_rq_data['sign'] = $_sign;
- return $_sign_str."&sign=".$_sign;
- }
- /**
- * 回调请求函数
- *
- * @param $url string 请求地址与端口
- * @param $params string post数据
- *
- * @return int 请求结果
- */
- public static function curlBack($url, $params) {
- $curl = curl_init(); //初始化curl
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_HEADER, 0); // 过滤HTTP头
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
- curl_setopt($curl, CURLOPT_POST, 1); // post传输数据
- curl_setopt($curl, CURLOPT_POSTFIELDS, $params);// post传输数据
- curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3);//设置等待时间
- //https 请求
- if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") {
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
- }
- $header = array("Content-Type: application/x-www-form-urlencoded; charset=UTF-8");
- curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
- //https 请求
- if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") {
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
- }
- $_rs = curl_exec($curl);
- curl_close($curl);
- if (isset($_rs['errno']) && 0 == $_rs['errno']) {
- $result = 1;
- } else {
- Log::write(
- 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'¶m='.json_encode($params).'&rs='
- .json_encode($_rs), Log::ERROR
- );
- $result = 0;
- }
- return $result;
- }
- }
|