1 微信分享网上的帖子很多,我也按照帖子的做了,遇到的问题如下:
//页面分享开始
$timestamp = time();
$nonceStr = $this->create_noncestr();
// 动态获取URL,
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if(isset($share_from) && $share_from!='' && isset($share_isappinstalled) && $share_isappinstalled !=''){
$url = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'&yongjin='.$yongjin.'&coupon_amount='.$coupon_amount.'&coupon_share_url='.$coupon_share_url;
$url = urldecode($url);
}
$jsapiTicket = $this->getJsApiTicket();
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
$string = "jsapi_ticket=".$jsapiTicket."&noncestr=".$nonceStr."×tamp=".$timestamp."&url=".$url;
$signature = sha1($string);
$signPackage = array(
"appId" => $this->appId,
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $url,
"signature" => $signature,
"rawString" => $string
);
$this->assign('signPackage',$signPackage);
第一个错误排查半天 appId 填错了,调用配置文件中的微信开发平台的,这里用的是微信公众号的appId,报错就是appId不匹配。
第二个错误 微信分享无法唤起微信,最后看帖子将 jssdk版本换成了 1.1.0版本就可以了,还有哦就是自定义的按钮好像不行必须点击右上角的三个点的按钮才能分享。
<script src="https://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
前端代码:
wx.config({
debug: false,
appId: "{$signPackage.appId}",
timestamp: "{$signPackage.timestamp}",
nonceStr: "{$signPackage.nonceStr}",
signature: "{$signPackage.signature}",
jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline','chooseImage']
});
wx.ready(function(){
wx.onMenuShareTimeline({//分享朋友圈
title: "{$info.title}",
desc: "券¥{$info.coupon_amount}",
link: "{$signPackage.url}",
imgUrl: "{$info.pict_url}",
success: function (res) {
mui.alert('分享/取消操作成功!');
}
});
wx.onMenuShareAppMessage({//分享给朋友
title: "{$info.title}",
link: "{$signPackage.url}",
imgUrl: "{$info.pict_url}",
success: function () {
mui.alert('分享/取消操作成功');
}
});
});
第三个错误就是 传参的问题:分享一次可以 二次分享或者多次后 链接就被微信追加了来源参数 from isappinstalled
最后无奈 我接到参数from 我就拼接我自己的参数。原来是直接拼接参数的这样导致只能传一个参数,后面链接再次分享被微信追加了from等参数,链接里面多了amp; 而且分享一次,每个参数前面就多个一个amp; 最后改成thinkphp的pathinfo模式了,这样就可以传多个参数了,这里花了我2天时间呀,各种方法试,
第四个是thinkphp的一个常见错误,
{:url('/index/Show/favoritesfree_show',array('item_id'=>$vo.num_iid,'pwd'=>$vo.pwd,'yongjin'=>$vo.yongjin,'coupon_amount'=>$vo.coupon_info))}?coupon_share_url={$vo.coupon_click_url}
在html标签中,上面代码在volist中正常,但是ajax 里面的 each遍历无法向url里面的array参数传参。最后百度 先写字符串,然后字符串替换。 (这个是列表页代码,和分享没关系)
//公共变量。
var pageNumber = 0;//第几页。
var pageZero = true;//pageZero表示从第一页开始加载数据。
var droploader = null;
/*只在页面加载时初始化一次。*/
$(function(){
droploadMethod();
});
function droploadMethod() {
droploader = $('.coupon_item').dropload({
scrollArea : window,
domDown : {
domClass : 'dropload-down',
domRefresh : '<p class="dropload-refresh">————— 我是有底线 —————</p>',
domLoad : '<p class="dropload-load"><span class="loading"></span>努力加载中...</p>',
domNoData : '<p class="dropload-noData">哥,这回真没了</p>'
},
//上拉加载
loadDownFn : function(me){
var flag = false;
ajaxForContent(me,flag);
},
});
}
function ajaxForContent(me,flag) {
//pageZero表示从第一页开始加载数据。
if(flag || pageZero){
pageNumber = 1;
}
pageNumber = parseInt(pageNumber)+1;
$.ajax({
url:"/index/Coupon/favoritesfree_ajax",
data:{'page':pageNumber},
type:'post',
dataType:'json',
async:true,
success: function(res){
if(res.code == 0){
var coupon_list = '';
$.each(res.data,function(k,v){
var url_before_replace = "{:url('/index/Show/favoritesfree_show',array('item_id'=>'replace_item_id','pwd'=>'replace_pwd','yongjin'=>'replace_yongjin','coupon_amount'=>'replace_coupon_amount'))}?coupon_share_url="+v.coupon_click_url;
var replaced_url_num_iid = url_before_replace.replace('replace_item_id',v.num_iid);
var replaced_url_pwd = replaced_url_num_iid.replace('replace_pwd',v.pwd);
var replaced_url_yongjin = replaced_url_pwd.replace('replace_yongjin',v.yongjin);
var replaced_url = replaced_url_yongjin.replace('replace_coupon_amount',v.coupon_info);
coupon_list+='<div class="coupon_item_list clearfix">';
coupon_list+='<div class="coupon_item_list_left"><a οnclick="checklogin(this)" data-url='+replaced_url+'><img src="'+v.pict_url+'" width="100%" /></a></div>';
coupon_list+='<div class="coupon_item_list_right">';
coupon_list+='<div class="coupon_item_list_tit"><a οnclick="checklogin(this)" data-url='+replaced_url+'>'+v.title.substring(0,28)+'</a></div>';
coupon_list+='<div class="coupon_item_xiaoliang clearfix">';
coupon_list+='<div class="coupon_item_xiaoliang_left">已售'+v.volume+'<span class="fan">买完即返</span></div>';
coupon_list+='<div class="coupon_item_xiaoliang_right">¥'+v.zk_final_price+'</div>';
coupon_list+=' </div>';
coupon_list+='<div class="coupon_item_list_quan clearfix">';
coupon_list+='<div class="coupon_item_list_quan_left clearfix">';
coupon_list+='<div class="coupon_text_quan">券</div>';
coupon_list+='<div class="coupon_text_price">'+v.coupon_info+'</div>';
coupon_list+='</div>';
coupon_list+='<div class="coupon_item_text_money"><div><img src="__HOME__/mobile/images/daoshou.png" width="100%" /></div>¥0.00</div>';
coupon_list+='</div>';
coupon_list+='</div>';
coupon_list+='</div>';
});
pageZero = false;
if(pageNumber >= 11){
me.lock();// 锁定
me.noData("noMoreData");// 无更多数据
}
// 如果没有数据
}else{
me.lock();// 锁定
me.noData();// 无数据
}
// 插入数据到页面,放到最后面
$("#Coupon_list").append(coupon_list);
// 每次数据插入,必须重置
me.resetload();
if(flag){
// 解锁loadDownFn里锁定的情况
me.unlock();
//如果加载页面超过总页数时
if(pageNumber >= 11){
me.lock();// 锁定
}
}
},
error: function(xhr, textStatus, errorThrown){
me.resetload();
}
});
}
OK,就说这么多,此贴只为了证明自己曾经犯过的错误,警惕他人,希望有用