開發環境:框架使用tp3.2.3,php版本》=5.6
1. 獲取access_token
**:
/**
* 建議這個函式寫在公共方法或其他公共類中,方便呼叫
*/function getaccesstoken()
s('access_token',$result['access_token'],$result['expires_in']);
return $result['access_token'];
}/*** 公共函式,curl訪問遠端連線
* @param string $url 需要訪問的連線
* @param array|string $data post請求方式時,需要提交的資料
*/ function request_curl($url, $data = '')
curl_setopt($ch, curlopt_returntransfer, true);
$result = curl_exec($ch);
curl_close($ch);
$rs = json_decode($result, 1);
return $rs;
}/**
* 每次在用到的地方調取函式獲取access_token的方法
*/ $accesstoken = s('access_token');
if(empty($accesstoken))
2. 準備素材
(1)上傳**訊息內的獲取url【訂閱號與服務號認證後均可用】
/**
*/public function uploadimg()
// 大小判斷,單位位元組
$file_size = filesize($news_url);
if(bccomp($file_size, 1024*1024) >= 0)
//首先獲取access_token
$accesstoken = s('access_token');
if(empty($accesstoken))
$wx_url = ''.$accesstoken;
$wx_data = array('media'=>new \curlfile(realpath(c('upload_img_path').$news_url))); // php版本<=5.5的,可以使用array('media'=>'@'.$news_url)的方式上傳,php>=5.6的,只能使用curlfile上傳,建議使用curlfile上傳
$res = request_curl($wx_url ,$wx_data);
if($res['url'])else
}}
(2)**訊息中需要的thumb_media_id的獲取(第二個坑:這個media_id的獲取,需要的是
,而不是
新增永久素材—新增其他型別永久素材
)**:
/**
* 因為上傳**訊息的介面中提到thumb_media_id是縮圖media_id,所以這裡處理按照「新增臨時素材」介面中規定的縮圖規格判斷上傳的
* @return json
*/public function mediaupload()
// 的型別判斷
// 大小判斷,單位位元組
$file_size = filesize($news_url);
if(bccomp($file_size, 64*1024) >= 0)
$material_type = 'thumb'; // 型別
$material_type_key = 'thumb_media_id'; // 上傳成功後返回的media_id的鍵名
//首先獲取access_token
$accesstoken = s('access_token');
if(empty($accesstoken))
$wx_url = ''.$accesstoken.'&type='.$material_type;
$wx_data = array('media'=>new \curlfile(realpath($news_url)));
$res = request_curl($wx_url ,$wx_data);
if($res['type'])else
}}
3. 準備需要上傳的**訊息(第三個坑:需要上傳的資訊,記得要做urlencode編碼,尤其訊息內容:含有雙引號的建議替換成單引號,特殊字元轉換成html實體再進行urlencode編碼;傳送post資料,傳送json格式,記得再將經過編碼處理的解碼後再傳送)
都準備好後,就應該上傳想要**的**訊息了,根據「上傳**資訊的介面」說明可知,每次最少上傳1條,最多可以上傳8條訊息,所以一定要注意。
**:
/**
* 這裡的前提條件:**訊息,都已經提前準備好
* @return json
*/public function uploadnews()
$mass_ids = explode(',', $mass_ids);
if(count($mass_ids) > 8)
$where = array();
$where['mass_id'] = array('in', $mass_ids);
$mass_res=$model->getwxbywhereselect($where); // 根據介面引數要求,獲取要上傳的**訊息字段值
foreach($mass_res as $mass_k => &$mass_v)else}}
$uploadnews = array(
'articles' => $mass_res,
);$uploadnews = htmlspecialchars_decode(urldecode(json_encode($uploadnews))); // 需要上傳的訊息,使用json串格式,然後使用urldecode及htmlspecialchars_decode對上面的資訊依次進行解碼
//首先獲取access_token
$accesstoken = s('access_token');
if(empty($accesstoken))
$url = ''.$accesstoken;
$uploadnews_res = request_curl($url, $uploadnews);
if($uploadnews_res['errcode'])elseelse
}}
4. **訊息(根據標籤進行**)
**:
/**
* 根據標籤**
* @return json
*/public function bytagmasssend()
$is_to_all = false;
if(empty($postdata['tag_id']))
$mass_send_arr = array(
'filter' => array(
'is_to_all' => $is_to_all,
'tag_id' => $postdata['tag_id'],
),'mpnews' => array(
'media_id' => $postdata['media_id']
),'msgtype' => 'mpnews',
'send_ignore_reprint' => $postdata['send_ignore_reprint']
);$mass_send_json = json_encode($mass_send_arr);
unset($mass_send_arr);
// **送
//首先獲取access_token
$accesstoken = s('access_token');
if(empty($accesstoken))
$url = ''.$accesstoken;
$mass_send_res = request_curl($url, $mass_send_json);
if($mass_send_res['errcode'] == 0)else
}else
}}
5. 到此,訊息**成功,在對應標籤下的使用者,能夠收到資訊。
考慮 php 5.0~5.6 各版本相容性的 curl 檔案上傳
踩坑 微信高階群發介面
1.根據openid列表 post例項 msgtype mpnews send ignore reprint 0 touser表示使用者openid列表,length至少為2,否則會報錯 invalid openid list size,at least two openid hint 畢竟是 2....
那些天我踩過的坑
使用knockoutjs時候,千萬不要在迴圈繫結中把dom元素的id寫死。例如在 input file 中 banging event change 時,千萬不要在ko.observablearray 中固定id屬性。如下所示 label for up img class am btn am btn...
微信SDK踩過的那些坑。。登入分享支付
1.應用中的包名 mainfext.xml中的package 必須與後台配置的一致。2.應用生成不能是debug包,必須是正式的簽名包。這個簽名必須與後台配置的一致。在第一點上,會出錯的概率還是比較小的。而在後台配置的卻是直接從在eclipse打簽名包時直接複製出來的md5簽名。大寫,並且中間夾雜 ...