微信小程式生成太陽碼
https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=access_token
必須通過POST送出
而且參數必須是JSON的格式
<?php
/**
* curl請求資料
*
* @param string $url 請求位址
* @param array $param 請求參數
* @param string $contentType 請求參數格式(json)
* @return boolean|mixed
*/
function https_request($url = '', $param = [], $contentType = ''){
$ch = curl_init();
// 請求位址
curl_setopt($ch, CURLOPT_URL, $url);
// 請求參數類型
$param = $contentType == 'json' ? json_encode($param) : $param;
// 關閉https驗證
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// post送出
if($param){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
}
// 傳回的資料是否自動顯示
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 執行并接收響應結果
$output = curl_exec($ch);
// 關閉curl
curl_close($ch);
return $output !== false ? $output : false;
}
$access_token="10_X1w4ypXMdfliiv4orym7n7Ur8UMV3LsPAyyBng-DOjcZfAW1mlfKb1BAvBQuBIMUvk_Bq2lv3E2TI8QLvTrnmy1TBxoDeXu_JvR_sobPBkUimmA-aNasktu-J6UWLCgAAAFUL";
$request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$access_token;
$request_data=array(
'scene'=>'abcdef',
'page'=>'pages/home/index',
'width'=>'690'
);
print_r(https_request($request_url,$request_data,'json'));
這裡有幾點需要注意,page參數中的值一定要是小程式中存在的。
這裡的access_token是用小程式的Appid和AppSecret生成的。之前還傻乎乎的去開啟公衆号的APPSecret。
再一個,這裡傳回的資料,不是JSON資料,而是二維碼圖檔資料。
如何通過postman操作呢?
萬能的POSTMAN啊。
{"page":"pages/home/index","scene":"abcdef","width":690}
封裝
封裝接口
// 擷取太陽碼
public function get_xcx_code() {
$uid = $_POST['uid'];
if (!$uid) {
$this->json->setErr('10001', '缺少參數');
$this->json->Send();
}
// 擷取使用者資訊
$user_model = M('user');
$user_info = $user_model->where(['id'=>$uid])->find();
if (!$user_info) {
$this->json->setErr('10002', '使用者不存在');
$this->json->Send();
}
$scene = $user_info['invite_code'];
vendor('Func.Http');
$request_data = [
'scene' => $scene,
'page' => "pages/home/index",
'width' => 690
];
$request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$this->get_access_token();
$result = Http::doPostJson($request_url,$request_data);
header('Content-Type: image/jpeg; charset=UTF-8');
echo $result;exit;
}
處理成base64
// 擷取太陽碼
public function get_xcx_code() {
$uid = $_POST['uid'];
if (!$uid) {
$this->json->setErr('10001', '缺少參數');
$this->json->Send();
}
// 擷取使用者資訊
$user_model = M('user');
$user_info = $user_model->where(['id'=>$uid])->find();
if (!$user_info) {
$this->json->setErr('10002', '使用者不存在');
$this->json->Send();
}
$scene = $user_info['invite_code'];
vendor('Func.Http');
$request_data = [
'scene' => $scene,
'page' => "pages/home/index",
// 'width' => 690
];
$request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$this->get_access_token();
$result = Http::doPostJson($request_url,$request_data);
// ob_clean();
// header('Content-Type: image/png; charset=UTF-8');
// echo $result;exit;
$this->json->setErr(0, '擷取成功');
$this->json->setAttr('data',base64_encode($result));
$this->json->Send();
}
封裝post請求
// 通過POST方式發送json資料
static public function doPostJson($url = '', $param = [] ,$contentType = 'json') {
$ch = curl_init();
// 請求位址
curl_setopt($ch, CURLOPT_URL, $url);
// 請求參數類型
$param = $contentType == 'json' ? json_encode($param) : http_build_query($param);
// 關閉https驗證
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// post送出
if($param){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
}
// 傳回的資料是否自動顯示
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 執行并接收響應結果
$output = curl_exec($ch);
// 關閉curl
curl_close($ch);
return $output !== false ? $output : false;
}
繼續更新
// 擷取太陽碼
public function get_xcx_code() {
$uid = $_POST['uid'];
if (!$uid) {
$this->json->setErr('10001', '缺少參數');
$this->json->Send();
}
// 檢視是否已存儲到資料庫
$user_suncode_model = M('user_suncode');
$user_suncode_info = $user_suncode_model->where(['uid'=>$uid])->find();
if ($user_suncode_info) {
$this->json->setErr(0, '擷取成功');
$this->json->setAttr('data',$user_suncode_info['code_imgurl']);
$this->json->Send();
}
// 擷取使用者資訊
$user_model = M('user');
$user_info = $user_model->where(['id'=>$uid])->find();
if (!$user_info) {
$this->json->setErr('10002', '使用者不存在');
$this->json->Send();
}
$scene = $user_info['invite_code'];
vendor('Func.Http');
$request_data = [
'scene' => $scene,
'page' => "pages/home/index",
];
$request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$this->get_access_token();
$result = Http::doPostJson($request_url,$request_data);
// 存入cdn
$cdn_result = $this->upload_cdn($result,'suncode');
if ($cdn_result['errno'] == 0) {
// 存入資料庫
$add_data = [
'uid' => $uid,
'code_imgurl' => $cdn_result['save_name'],
'addtime' => time()
];
$user_suncode_model = M('user_suncode');
$user_suncode_model->add($add_data);
$this->json->setErr(0, '擷取成功');
$this->json->setAttr('data',$cdn_result['save_name']);
$this->json->Send();
} else {
$this->json->setErr(10099, '擷取失敗');
$this->json->Send();
}
}
public function upload_cdn($img_result,$folders="common"){
$date_folders = date('Ymd',time());
$savePath = "site_upload/".$folders.'/'.$date_folders.'/';// 設定附件上傳目錄
if (!is_dir($savePath)){
@mkdir('./'.$savePath, 0777,true);
}
$file_name = time().'_'.mt_rand().".png";
$upload_flag = file_put_contents($savePath.$file_name,$img_result);
if($upload_flag){
vendor('Qiniu.Qiniu');
$qiniu = new Qiniu();
$img = C('SF_HOST'). $savePath . $file_name;
$ext = pathinfo($img, PATHINFO_EXTENSION);
$name = time() . mt_rand() . '.' . $ext;
$s = $qiniu->up($img, $name, C('QINIU.BUCKET'));
if($s){
@unlink('./'.$savePath . $file_name);
$res['errno']='0';
$res['errmsg']='ok';
$res['save_name'] = C('CDN.URI') . $name;
}else{
@unlink('./' .$savePath . $file_name);
$res['errno']='10001';
$res['errmsg']='上傳cdn失敗';
}
}else{
$res['errno']='10002';
$res['errmsg']='上傳圖檔失敗';
}
return $res;
}