因小米平台方没有php处理事例,所以只能自写。(小米看不起php,我也不起小米)
先说明逻辑:
广告主(我们)通过小米应用商店投放广告,用户点击广告产生数据,如下载我们推广APP,用户注册,后台回传用户数据给广告平台。
准备工作:
1、客户端需要能获取到oaid或imei
2、其他数据:ua、ip、包名、注册时间等
3、事件:激活、注册、付费
4、考虑到用户量、php执行机制、建议APP注册用户功能和回传广告功能要解耦,避免第三方接口出现问题时导致平台用户注册出现等待过长或其他异常等。(自行处理)
先写一个方法
/**
* 小米广告回传
*/
public static function xiaomi($data){
$query = '';
$data = array_filter($data);
if(isset($data['imei'])){
$query .= "&imei=".strtolower(md5(urlencode($data['imei'])));
}
if(isset($data['oaid'])){
$query .= empty($query)?"oaid=".urlencode($data['oaid']):"&oaid=".urlencode($data['oaid']);
}
if(isset($data['time'])){
$query .= "&conv_time=".urlencode($data['time']*1000);
}
if(isset($data['ip'])){
$query .= "&client_ip=".urlencode($data['ip']);
}
if(isset($data['ua'])){
$query .= "&ua=".urlencode($data['ua']);
}
$signature = md5(AD_XIAOMI['sign_key']."&".urlencode($query));
$base_data = $query."&sign=".urlencode($signature);
$info = self::encryption($base_data,AD_XIAOMI['encrypt_key']);
$appid = AD_XIAOMI['appid'];
$convType = AD_XIAOMI['conv_type'];
$customerId = AD_XIAOMI['customer_id'];
$url = AD_XIAOMI['api_url']."appId=".urlencode($appid)."&info=".urlencode($info)."&conv_type=".urlencode($convType)."&customer_id=".urlencode($customerId);
self::curlGet($url);
return true;
}
上面这个方法可以直接调用,相关配置参数在小米广告后台获取:appid、customer_id,api_url等。
配置参数:
@define("AD_XIAOMI",['appid'=>"11111111","sign_key"=>"11111","encrypt_key"=>"111111","customer_id"=>"1111",'conv_type'=>"APP_REGISTER",'api_url'=>"http://trail.e.mi.com/global/test?"]);//正式 "http://trail.e.mi.com/global/log?" 测试 "http://trail.e.mi.com/global/test?"
需要使用的方法
按位异或加密
/*按位异或加密
* @param $value 需加密的字符串
* @param $type 加密解密[0加密,1解密]
* @return 加密或解密后的字符串
*/
public static function encryption($value,$key,$type=0){
$crytxt='';
for ($i=0;$i<strlen($value);$i++){
$m=$i%strlen($key);
$crytxt .=$value[$i]^$key[$m];
}
return base64_encode($crytxt);
}
curl请求方法
public static function curlGet($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode === 200) {
// 打印返回结果
$res = json_decode($response, true);
curl_close($ch);
return $res; // 返回error_code为0时接口调用成功,否则需排查具体原因
}
curl_close($ch);
return false;
}
小米对接文档:
https://api.e.mi.com/doc.html#/1.0.0-mdtag9b26f-omd/document-f0283649125f62138db43c6f5fc25686