1.獲取微信開放功能的基礎參數配置,類似分享功能,定位功能也都需要獲取改參數,
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
wx.config({
debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
appId: '{$weixin.appId}', // 必填,公眾號的唯一標識
timestamp: '{$weixin.timestamp}', // 必填,生成簽名的時間戳
nonceStr: '{$weixin.nonceStr}', // 必填,生成簽名的隨機串
signature: '{$weixin.signature}', // 必填,簽名,見附錄1
jsApiList: [
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'openLocation',
'chooseWXPay',
'chooseImage', // 這里需有選擇圖片,上傳圖片的功能,
'uploadImage'
]
});
wx.ready(function () {
// wx.onMenuShareAppMessage({
// title: '標題', // 分享標題
// desc: `描述`, // 分享描述
// link: `http://*******/wx.php`, // 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致
// imgUrl: 'https://cdn.caomall.net/15606006301896208141.jpg', // 分享圖標
// success: function () {
// // 用戶確認分享后執行的回調函數
// },
// cancel: function () {
// // 用戶取消分享后執行的回調函數
// }
// });
// wx.onMenuShareTimeline({
// title: '標題', // 分享標題
// desc: `描述`, // 分享描述
// link: `http://*******/wx.php`, // 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致
// imgUrl: 'https://cdn.caomall.net/15606006301896208141.jpg', // 分享圖標
// success: function () {
// // 用戶確認分享后執行的回調函數
// },
// cancel: function () {
// // 用戶取消分享后執行的回調函數
// }
// });
});
</script>
選擇圖片,上傳圖片
- 注意:微信開發工具不可真正上傳,但流程都中轉參數都對的,仔細觀察會發現上傳的severId是不變的----這個就是微信的坑了!!!!!
- 必須用手機上傳,沒張圖片上傳可能需要些時間;
var pics = [];
$('#add_btn_1').on('click',function(){
let max_count = 3;
if(pics.length >= max_count){
return alert('最多3張');
}
//alert('sss');
wx.chooseImage({
count: max_count - pics.length, // 默認9
sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓縮圖,默認二者都有
sourceType: ['album', 'camera'], // 可以指定來源是相冊還是相機,默認二者都有
success: function (res) {
console.log(res);
var localIds = res.localIds; // 返回選定照片的本地ID列表,localId可以作為img標簽的src屬性顯示圖片
new Promise(function(resolve,reject){
for(var i = 0;i< localIds.length;i++){
wx.uploadImage({
localId: localIds[i], // 需要上傳的圖片的本地ID,由chooseImage接口獲得
isShowProgressTips: 1, // 默認為1,顯示進度提示
complete: function (res) {
console.log('-----');
console.log(res);
var serverId = res.serverId; // 返回圖片的服務器端ID
$.ajax({
type : 'POST',
dataType : 'json',
url : '/api.php/Upload/uploadServerId',
data : { serverId },
success : function(data){
if(!data.errno){
console.log(data);
pics.push(data.data);
} else {
return alert(data.errdesc);
}
},error : function(){
alert('網絡錯誤');
}
});
}
});
}
setTimeout(function(){
resolve(pics);
},1500 * localIds.length); // 一張上傳時間比較長....2s
}).then(function(pics){
console.log('then---執行');
let ejs_data = [];
ejs_data.data = pics;
console.log('ggggggggggggggggggggg');
console.log(ejs_data);
var ec_canvs = new EJS({ element: "ejs_pics_id"}).render(ejs_data); // 這里用ejs,實現上傳多圖樣式拼接;
$("#imageWrap").html(ec_canvs);
})
}
});
});
/**
* 微信公眾號 上傳圖片
*/
public function uploadServerId() {
if (!$serverId = $_POST['serverId']) {
$this->json->E('缺少serverId',10001);
}
$url = C('PROXY_HOST') . 'Media/getMediaImg';
$params = [
'media_id' => $serverId
];
$cdn_result = Http::newDoPost($url,$params);
$cdn_result = json_decode($cdn_result, true);
setlog($cdn_result,[],'','up.log');
if ((int)$cdn_result['code'] === 1) {
$this->json->S($cdn_result['data']);
} else {
$this->json->E('服務器繁忙');
}
}
<?php
namespace Proxy\Action;
use Vendor\Func\Func;
use Vendor\Func\Http;
use Vendor\Qiniu\Qiniu;
class MediaAction extends CommonAction
{
// 獲取媒體數據
//http://file.api.weixin.qq.com/cgi-bin/media/upload
const API_MEDIA_GET = 'http://file.api.weixin.qq.com/cgi-bin/media/get';
public function getMediaImg() {
$access_token = $this->_get_access_token();
// 獲取參數
$media_id = $_POST['media_id'];
$params = [
'access_token' => $access_token,
'media_id' => $media_id,
'type' => 'thumb' // 這里用image,可能太大會上傳不了;
];
$result = Http::newDoGet(self::API_MEDIA_GET, $params);
$decode_res = json_decode($result,true);
if($decode_res['errcode'] != 0){
$this->ajaxReturn($this->jsonError(10021, $decode_res['errmsg']));
}
// 存入cdn
$cdn_result = $this->uploadCdn($result); // 上傳cdn, 具體功能函數省略...
//setlog($cdn_result,[$result],'media_result','proxy_error_2.log');
setlog($cdn_result,[],'media_result','proxy_error_222.log');
if ((int)$cdn_result['errno'] === 0) {
$this->ajaxReturn($this->jsonSuccess(1, '成功', $cdn_result['save_name']));
} else {
$this->ajaxReturn($this->jsonError(10001, '服務器繁忙'));
}
}
}
?>

https://www.jb51.net/article/161349.htm
https://www.cnblogs.com/fanshuyao/p/6227130.html
https://blog.csdn.net/zzwwjjdj1/article/details/52354763
https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Get_temporary_materials.html
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#19
https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E5%A4%9A%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%8E%A5%E5%8F%A3%20/media/upload