您现在的位置是:首页 PHP

APICloud微信、QQ登录分享实现方法及注意事项

博主 添加时间:2017-04-18 13:47:22 【PHP】 热度:1482人已围观

针对用户最近的问题,对微信登录分享、QQ登录分享进行一个流程性的讲解。在微信分享经常是分享不成功或者图片不显示,主要问题是图片过大或者是没有本地化。在config.xml的配置就不多说了
一、微信登录(使用wx模块)

1、流程:使用auth进行授权--->getToken获取用户信息---->同步至服务端

注意:在安卓端可以提示用户没有安装微信端,但是ios端切忌不要加任何提示

2、代码实现:

(因为会有一个唤起微信客户端的时间,代码里面加了showProgress过度了一下)

var wx = api.require('wx');
wx.auth({
    apiKey: ''//在此输入你的微信apikey
}, function(ret, err){
    if(ret.status){
        api.showProgress({
            style: 'default',
            animationType: 'fade',
            title: '登录中...',
            text: '请稍后...',
            modal: false
        });
        wx.getToken({
            //apiKey: '',
            //apiSecret: '',
            code: ret.code
        },function(ret, err){ 
             
            if(ret.status){
                //获取用户信息
                var accessToken = ret.accessToken;
                var openId = ret.openId;
                wx.getUserInfo({
                    accessToken: ret.accessToken,
                    openId: ret.openId
                }, function(ret,err){ 
                    if(ret.status){
                        //将信息同步至服务器
                         api.ajax({
                            url: '',//你的服务器地址
                            method: 'post',
                            cache:true,
                            timeout: 30,
                            dataType: 'json',
                            returnAll:false,
                            data:{
                                values:{
                                    nickname:ret.nickname,
                                    avatar:ret.headimgurl,
                                    privilege:ret.privilege,
                                    unionid:ret.unionid,
                                    city:ret.city
                                }
                            }
                        },function(ret,err){
                            api.hideProgress();
                            if(ret.code==1){
                                api.toast({
                                    msg: '登录成功',
                                    duration:2000,
                                    location: 'top'
                                });
                                
                            }else{
                                api.alert({
                                    msg:''+ret.msg+''
                                });
                            }
                        })
                    }
                });
            }
        });
        
    }else{
        if(api.systemType=='android' && err.code==3){
            alert("请安装微信客户端");
        }
    }
})


二、微信分享

以shareWebPage为例进行代码说明,微信要求的是图片必须是本地图片,所有我们在分享之前必须将图片先保存至本地,可以使用api.download的方法将图片保存到本地。

很多用户反馈分享不成功,大多数是因为图片的处理没有到位。

比如:先声明一个全局变量,var thumb;在apiready里面从服务端获取到数据后给thumb赋值,在服务端我们需要对这个图片压缩后在返回,免得图片过大造成分享不成功
api.download({
    url: '服务器端的图片url',
    report: true,
    cache: true,
    allowResume:true
},function(ret,err){
    if (ret.state==1) {
        thumb = ret.savePath;
    }
})
用户点击分享后:
var wx = api.require('wx');
wx.shareWebpage({
    //apiKey: '',
    scene: 'timeline',
    title: '标题',
    description: '描述',
    thumb: ''+thumb+'',
    contentUrl: 'url'
}, function(ret, err){
    if(ret.status){
        alert("分享成功");
    }
});


三、qq登录

QQ登录的原理跟微信就差不多了,但是感觉腾讯没有返回一个类似唯一值的东西貌似不太好。
出现110404的错误,大多是因为config.xml里面urlScheme和appkey的配置错误,要写成tencent加上你的appkey。例:tencent0000000001

var obj = api.require('qq');
obj.login(function(ret,err){
    if(ret){
        api.showProgress({
            style: 'default',
            animationType: 'fade',
            title: '登录中...',
            text: '请稍后...',
            modal: false
        });
        //验证成功
        var openId = ret.openId;
        var accessToken = ret.accessToken;
        //获取用户基本信息
        obj.getUserInfo(function(ret,err) {
                api.hideProgress();
            if (ret.status) {
                //获取成功后的操作
            }
        });
    }
});


四、QQ分享

qq分享以shareNews为例子,有个问题是这个在文档里面并没有一个处理返回的一个操作,所以在app就没法判断是否已经分享出去。也就是没有一个function(ret,err){}的一个处理。

这个例子就比较简单了,

var obj = api.require('qq');
obj.shareNews({
    url:'http://www.uzmap.com',
    title:'新闻分享',
    description:'新闻描述',
    imgUrl:'http://upload.wabei.cn/2011/0807/20110807025817844.jpg'
});


  • 相关文章
  • Mac 如何关闭自带的Apache

    安装XAMPP后,启动服务时提示Apache启动失败,80端口被占用.查看进程发现存在几个httpd. OS X自带Apache,可是默认是没有启动的.我也没有开启Web共享,怎么就开机启动了呢? 不知道是不是因为安装了别的什么软件导致的.一般的开机启动项可以在System Preferences–Users&Groups–Login Items中添加或删除.可是在这里也没有发现Apache相关的启动项.于是谷歌到了下面一个可行的方法,打开终端,执行下面的命令.

  • LNMP环境下WordPress网站二级目录伪静态设置

    今天在给客户网站做二级目录的分类,网站一直报错404,显示应该是伪静态问题。看了下LNMP环境里的WordPress规则,貌似没有支持二级目录的。所以只好自己加一个了。目前VPS主机中使用LNMP一键安装包搭建的环境都没有带二级目录的规则。有需要的朋友可以复制下面的代码,可以让wordpress完美使用伪静态的设置。找到”/usr/local/nginx/conf/wordpress.conf”文件,然后添加:

  • 一个程序员的自白:我为什么写博客

    尝试和接触的知识一多, 便发现自己的脑袋跟硬盘相比, 速度和精准度上都差得不止一星半点. 事情越来越多, 且没有交集, 所有的知识点都零散的分布在脑袋的不同次元, 想要回忆起来特别困难. 一度让我觉得, 学越来越多的东西根本就是一个错误, 正确的方式应该是瞅准一个东西, 精益求精. 虽然这么想, 但是工作不是你想不做就不做的.

  • PHP中把stdClass Object转array的几个方法

    我们在经常使用API接口获取数据返回json数值的时候,往往单纯通过json_decode方法解析获得得数值一般并非数组,而是带有stdClass Objec的对象字符串,这时如果我们想获取相应的PHP数组时,需通过以下几种方法来获取。

  • PHP验证类库_收集开发常用验证方法

    我们在开发项目的时候往往会通过PHP的正则方式来判断用户所输入的信息是否合格或者正确,下面我给大家收集和整理成一个类,供大家参考和使用。如有问题请留言谈论。

文章评论

博客名片

职业:PHP程序员

现居:河南省-洛阳市

博客地址:www.lizongyang.cn

Email:5708837@qq.com

站点信息

  • 建站时间:2019-03-25
  • 网站程序:李宗洋博客
  • 联系电话:15888888888
  • 文章统计4084篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们

打赏本站

  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!
  • 微信扫码:你说多少就多少~
  • 支付宝扫码:你说多少就多少~

客服在线

服务时间

周一至周日 9:00-21:00