微信接口文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738731
1 新增永久素材按照文档走就可以 没有什么坑,
articles 中是一个多维数组
{"articles":[{"title":"标题","thumb_media_id":"Tu1YMHMYtpGeoyr3F_Mhp5_wDVNo3qOpsc9eBKGIxm","author":"我是作者","show_cover_pic":"","content":"<p>我是内容<br/></p>","content_source_url":""},{"title":"标题","thumb_media_id":"Tu1YMHMYtpGeoyr3F_Mhp7nAWUMlEjLTTyVCB07GUA","author":"左右","show_cover_pic":"","content":"<p>我是123</p>","content_source_url":""}]}
提交正确
2 修改永久素材中存在问题
这个坑就是,一次只能是修改一篇文章,而且index中是对应的文章的第几篇,所以这个我使用 的async,异步去进行ajax去提交代码如下
//保存 修改素材
$scope.savedata = function() {
if (!$scope.wxappid || $scope.articles.length < 0) {
return;
}
if ($scope.wxappid && $scope.media_id) {
$scope.address = {
"media_id": $scope.media_id,
"index": $scope.articles.length > 1 ? $scope.articles.length : 0,
"articles": []
}
var api = 'wxUpdateNews';
}
if (!$scope.media_id) {
$scope.address = { articles: [] };
var api = 'wxAddNews';
}
if ($scope.testData()) {
post();
}
function post() {
var i = 0;
async.mapSeries($scope.articles, function(da, callback) {
var article = {
"title": da.title, //必须
"thumb_media_id": da.thumb_media_id,
"author": da.author,
"digest": da.digest,
"show_cover_pic": da.show_cover_pic,
"content": da.content,
"content_source_url": da.content_source_url,
}
if ($scope.media_id) {
$scope.address.articles = article;
$scope.address.index = i;
$scope.postApi(api, $scope.wxappid, $scope.address).then(function(t) {
i = i + 1;
callback(null, t);
});
} else {
$scope.address.articles.push(article);
callback(null, 1);
}
}, function(e, r) {
if ($scope.address && !$scope.media_id && r) {
$scope.postApi(api, $scope.wxappid, $scope.address).then(function(t) {
if (t) {
helper.myAlert("新增图文消息成功", "#/article/list");
}
});
}
if ($scope.media_id && r) {
helper.myAlert("修改图文消息成功", "#/article/list");
}
});
}
}
//检验数据
$scope.testData = function() {
for (var i = $scope.articles.length - 1; i >= 0; i--) {
if (!$scope.articles[i].content) return helper.myAlert("图文内容不能为空!");
if (!$scope.articles[i].thumb_media_id) return helper.myAlert("图文封面不能为空!");
if (!$scope.articles[i].title) return helper.myAlert("图文标题不能为空!");
if (!$scope.articles[i].author) return helper.myAlert("图文作者不能为空!");
}
return true;
}
$scope.postApi = function(api, wxappid, address) {
return dataService[api](wxappid, address).then(function(result) {
return result;
});
}
异步async 进行处理 可以用到批量处理的地方 我使用 的mapSeries 方法是把所有的请求串起来,等结束后,在进行返回,也是直接map不用串起来是进行请求,
还有几个坑是,图片的上传,文章中可以使用
图片上传可以是永久的图文上传
两个的区别是,
第一个之后返回url,你在微信中是查不到的,
第二个是media_id,你要是使用链接的话,还需要进行查询展示,所以这地方可以写成组件,上传后文件后,在进行展示出来,在选择;
3 获取微信公众号
1 这有一个坑 就是微信图片不展示出来
在页面必须加上
代码:<head>
<meta name="referrer" content="never">
</head>
才能进行展示出来,
2 第二坑是,微信返回的数据格式,是不能使用的,把src中的 地址给去掉了,所以我们要自己进行组装后,才能使用
//组装数据
//$scope.description h是获取到的 content 内容
//$scope.description h是获取到的 content 内容
$scope.AssembleContent = function() {
//把转义 的网址加上
var str2 = $scope.description.replace(/="cn/g, '="https://mmbiz.qpic.cn');
console.error("dd", $scope.description);
//根据 data-typef分割
$scope.description = str2.split('data-src="');
var sty = {};
console.error("$scope.description",$scope.description);
_.map($scope.description, function(da, isk) {
//从头开始进行截取 到" 号
var dd = da.substr(0, da.indexOf('"'));
// var dd = da.substr(0, da.indexOf('data-src="'));
console.error("dd", dd);
//判断 http 是否存在,存在的话,就说明是一个src 链接
var d = dd.indexOf('http');
//indexOf 如果存在的话,会返回0
if (d == 0) {
sty[isk] = dd;
// console.error("dd", dd);
}
});
console.error("sty",sty);
var cont = '';
//然后在进行把截取的字符串拼接在一起
_.map($scope.description, function(ddd, kkk) {
if (kkk == 0) {
cont = ddd;
} else {
//因为之前截取的时候是根据 k进行赋值的,k的值不变的,然后判断有没有值,
if (sty[kkk]) {
cont = cont + 'src ="' + sty[kkk] + '" data-src="' + ddd;
} else {
cont = cont + 'data-src="' + ddd;
}
}
});
cont = cont.replace(/<a/g, '<a href=""');
$scope.article.content = cont;
}
如果是多篇文章的话,可以进行循环执行;
4 删除素材
按照文档 执行就可以,没有什么难度