• 微信公众号定位用户所在位置 最近由于项目的原因,涉及到了微信公众号,看了几天文档加上问了问同事,对这个玩意有一点了解,写一下微信公众号定位的方法,记一下以后方便用。 //获取code var url = location.href....

    微信公众号定位用户所在位置

    1. 最近由于项目的原因,涉及到了微信公众号,看了几天文档加上问了问同事,对这个玩意有一点了解,写一下微信公众号定位的方法,记一下以后方便用。
    //获取code
        var url = location.href.split('#')[0];
        var area=getUrlParams("area");
        if(!area){
            //获取signInfo
            $.ajax({
                url: "url",
                type: "post",
                dataType: "json",
                data: {"url": url},
                async: false,
                success: function (data) {
                    if (data) {
                        initWxConfig(data);
                    }
                },
                error: function () {
                    $.attr("微信初始化失败");
                }
            });
    
            function initWxConfig(data) {
                wx.config({
                    // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,
                    debug: false, 
                    // 必填,企业号的唯一标识,此处填写企业号corpid
                    appId: data.appidInfo, 
                    // 必填,生成签名的时间戳
                    timestamp: data.timestamp, 
                    // 必填,生成签名的随机串
                    nonceStr: data.nonceStr, 
                    // 必填,签名,见附录1
                    signature: data.signature,
                    // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                    jsApiList: ["getLocation"] 
                });
                wxLocation();
            }

    上边微信初始化配置简单略过,主要是获取关键的appid和签名 同事协商需要调用的api接口列表,下边是重点获取location

    function wxLocation() {
                //思路是通过微信的方法获取用户的经纬度坐标 然后将经纬度坐标传给高德地图api接口,API会返回对应的地理信息
                wx.ready(function () {
                    // 获取当前地理位置
                    wx.getLocation({
                        success: function (res) {
                            AMap.service('AMap.Geocoder', function () {//回调函数
                                //实例化Geocoder
                                geocoder = new AMap.Geocoder();
                                //地图上所标点的坐标 微信获取经纬度
                                var lnglatXY = [res.longitude, res.latitude];
                                geocoder.getAddress(lnglatXY, function (status, result) {
                                    if (status === 'complete' && result.info === 'OK') {
                                        //获得了有效的地址信息,以上就是获取位置的方法,下边是我的业务需要  再次调用api接口获得城市的区号
                                        var data=result.regeocode.addressComponent,
                                            province = data.province,
                                            city = data.city,
                                            district = data.district;
                                        $("#fsenderAddress").val(province+"-"+city+"-"+district).trigger("change");
                                        geocoder.getLocation(city+district, function(status, result) {
                                            if (status === 'complete' && result.info === 'OK') {
                                                $("#fsenderCountyCode").val(result.geocodes[0].adcode)
                                            }
                                        })
                                    } else {
                                        //获取地址失败
                                    }
                                });
                            })
                        },
                        cancel: function (res) {
                            alert('用户拒绝授权获取地理位置');
                        }
                    });
                });
            }

    先记录这么多吧。。

    展开全文
  • 1、掌握微信开发PHP调试技巧。 二、实验内容 1、利用程序调试追踪工具PHPLog php调试程序。 2、使用die()/exit()命令。 3、使用var_dump()和print_r()命令。 4、使用Eclipse Php Neon开发环境的调试工具。

    (>>>>在公众号中输入文章最后彩蛋即可获取源代码)

    开源项目:https://github.com/chenxhjeo,个人博客:http://blog.csdn.net/u013487761

    技术QQ群名称:豆豆咨询,群号:625686304

    微信公众号名称:豆豆咨询,微信公众号:douAsk

    初建日期:2017.04.11

    一、实验目的 

    1、掌握微信开发PHP调试技巧。 

    二、实验内容

    1、利用程序调试追踪工具PHPLog php调试程序。

    2、使用die()/exit()命令。

    3、使用var_dump()和print_r()命令。

    4、使用Eclipse Php Neon开发环境的调试工具。

    三、实验步骤及过程 

    学会调试程序是开发的重要内容,PHP调试不如其它的工具调试,特别是web网站的交互,当前PHP开发工具难以实现(如果有其它的PHP开发调试工具,希望能够在微信公众号“豆豆咨询”里留言)。

    本实验采用不同的方法实现PHP调试。程序执行的过程中,在相应的地方记录你想要追踪的变量及调用栈和每次函数调用的参数。

    1、使用PHPLog php调试工具。

    PHPLog php调试工具是邓志义在2009/08/23于广州书写,我们修改了部分内容(在”豆豆咨询”公众号源程序下载中可以看到修改的内容)。

    a. 拷贝phplog.php文件:把phplog.php文件放到你的站点目录下。

    b. 编辑phplog.php文件:用编辑器打开phplog.php,定位到20行,设定好你个人的配置。

    c. 浏览phplog.php文件:在浏览器中打开phplog.php,你就可以看到一些相关的信息及帮助说明。例如在浏览器中输入如下网站地址信息http://78976932.tunnel.2bdata.com/ThinkPHP/public/phplog.php,我们将看到如下信息:

    d. 编辑想要调试的PHP文件:使用编辑器打开你的PHP文件,例如PHPDebug.php文件,在PHPDebug.php文件中使用phplog.php中的__log函数记录你想要记录的变量、对象以及其他相关的调试信息。例如:

    l  在PHP文件顶部输入:require '../phplog.php';

    l  在程序其他地方输入编码:__log('Hello 豆豆');

    e.运行调试的PHP文件:在浏览器中输入网址信息,例如http://78976932.tunnel.2bdata.com/ThinkPHP/public/weixin/PHPDebug.php,将运行PHP文件,phplog.php将记录调试信息在相同目录下的文件中,例如2017-04-11.log文件。

    f. 查看和编辑运行结果:在浏览器中输入地址,浏览调试文件,如http://78976932.tunnel.2bdata.com/ThinkPHP/public/phplog.php,这时运行phplog.php,可以看到调试的信息。而且,你还可以查看、编辑调试信息:在你的浏览器里访问phplog.php,将看到你刚才记录的信息及它的调用栈和参数。当你通过浏览器访问运行phplog.php程序时,该程序会把整个文件读取分析,在页面显示你的所有调试信息,并且它会动态ajax刷新。

    注意:请不让log文件超过5M大小,浏览器可能会崩溃的。

    2、使用die()/exit()命令。

    die()/exit()函数都有终止线程的作用,应该是等价的,它们是php断点调试需要使用的最主要的函数,它们也是php程序员使用非常频繁的函数。die()函数一般与“or”一并使用,写作“or die()”,经常看到这样的语句:

    $file = fopen($filename, 'r') or die("抱歉,无法打开: $filename")

    解释:如果fopen函数执行失败,就会返回false,那么就会执行die(),程序则会停止执行,并且显示指定出错信息,以此达到调试目的。

    具体实例:

     <?php

    $site = "http://www.google.com/";

    fopen($site,"r") or exit("Unable to connect to$site");

    ?>

    或者

     <?php

    $site = "http://www. google.com/";

    fopen($site,"r") or die("Unable to connect to$site");

    ?>

    你将看到“Unable to connect to http://www.google.com/”信息。

    3、使用var_dump()print_r()命令。

    1)var_dump -- 打印变量的相关信息

    void var_dump ( mixed expression [, mixed expression [, ...]] )

    此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。例如以下代码将输出变量:

    <?php

    $a = array (1, 2, array ("a", "b", "c"));

    var_dump ($a);

    $b = 3.1;

    $c = TRUE;

    var_dump($b,$c);

    ?>

    2)print_r -- 打印关于变量的易于理解的信息

    bool print_r ( mixed expression [, bool return] )

    a.    print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。

    例如:

    <?php

    $a = array ('a' => 'apple',

    'b' => 'banana',

    'c' => array ('x','y','z'));

    print_r ($a);

    ?>

    将输出:

    Array ( [a] => apple [b] => banana [c]=> Array ( [0] => x [1] => y [2] => z ) )

    b.    print_r(,true):如果想捕捉 print_r() 的输出,可使用 return 参数。若此参数设为 true,print_r() 将不打印结果(此为默认动作),而是返回其输出。

    例子:return 参数示例

    <?php

    $b = array ('m' => 'monkey',

    'foo' => 'bar',

    'x' => array ('x', 'y', 'z'));

    $results = print_r ($b, true);//$results 包含输出结果

    ?>

    4、使用Eclipse Php Neon开发环境的调试工具。

    安装集成开发环境,Eclipse Php Neon新建项目,然后添加PHP文件,采用Debug as/ PHP CLI Application进入调试环境,调试器XDebug采用WAMP工具包安装的php.exe,如上图所示。我们可以其他集成开发工具一样,进入断点调试环境。但有一个缺点,即当用户访问网页时,调试环境不能与其同步,与visual studio有一定的差距。希望未来能够增加这个功能,实现与用户的直接交互调试。

    四、技术服务


    1、如果有疑问或者需要帮助,请加入QQ群(群名称:豆豆咨询,群号:625686304);或者公众号douAsk,公众号名称为“豆豆咨询”。扫描以下二维码,关注“豆豆咨询”

     


    在“豆豆咨询”公众号中输入以下彩蛋号,将获取源代码:

    彩蛋号:1204

    展开全文
  • 微信公众平台开发之公众号JSSDK开发是子恒老师《微信公众平台开发》视频教程的第9部。详细讲解了用php开发微信公众号,对微信公众平台中的JSSDK开发。内容包含用JSSDK获取网络状态,地理位置,分享到朋友圈,QQ,...
  • 个人微信开发api文档

    2019-05-24 04:13:32
    个人微信开发api文档 个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口 微信开发sdk服务端调用接口 1、基础消息类型 1、客户端发送的心跳包 HeartBeatReq = 1001; 2、消息接收确认回复...

    个人微信开发api文档

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    微信开发sdk服务端调用接口
    1、基础消息类型
    1、客户端发送的心跳包 HeartBeatReq = 1001;

    2、消息接收确认回复(接收或拒绝接收) MsgReceivedAck = 1002;

    3、错误单独提升为一种消息类型 Error = 1003;

    2、设备客户端授权类消息

    1、设备(手机客户端、客服客户端)获取通信token请求 DeviceAuthReq = 1010;

    2、设备(手机客户端、客服客户端)获取通信token响应 DeviceAuthRsp = 1011;

    3、设备授权后退出(仅用于服务端内部) DeviceExitNotice = 1012;

    4、账号强制下线通知 AccountForceOfflineNotice = 1013;

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    3、手机客户端上传的通知类消息

    1、手机客户端微信上线通知 WeChatOnlineNotice = 1020;

    2、手机客户端微信下线通知 WeChatOfflineNotice = 1021;

    3、微信个人号新增好友通知 FriendAddNotice = 1022;

    4、微信个人号移除好友通知 FriendDelNotice = 1023;

    5、微信好友发来聊天消息 FriendTalkNotice = 1024;

    6、任务执行结果通知 TaskResultNotice = 1025;

    7、手机上回复好友的聊天消息 WeChatTalkToFriendNotice = 1026;

    8、有好友请求添加好友的通知 FriendAddReqeustNotice = 1027;

    9、手机端向服务端通知聊天执行结果 TalkToFriendTaskResultNotice = 1028;

    10、图片或视频消息的详细内容结果 RequestTalkDetailTaskResultNotice = 1029;

    11、上传手机客户端上微信的二维码 PullWeChatQrCodeTaskResultNotice = 1030;

    12、手机上发送了朋友圈通知 CircleNewPublishNotice = 1031;

    13、手机上删除朋友圈通知 CircleDelNotice = 1032;

    14、手机检测到有人点赞/取消点赞通知 CircleLikeNotice = 1033;

    15、手机检测到有人评论/删除朋友圈通知 CircleCommentNotice = 1034;

    16、消息标记为已读 PostMessageReadNotice = 1035;

    17、联系人信息上传 ContactsInfoNotice = 1036;

    18、群聊新增通知 ChatRoomAddNotice = 1037;

    19、联系人标签新增,修改通知 ContactLabelAddNotice = 1038;

    20、收钱任务执行结果通知 TakeMoneyTaskResultNotice = 1039;

    21、朋友圈图片上传 CircleDetailNotice = 1040;

    22、群聊删除通知 ChatRoomDelNotice = 1041;

    23、群聊信息变更通知 ChatRoomChangedNotice = 1042;

    24、群二维码 PullChatRoomQrCodeTaskResultNotice = 1043;

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    4、服务端、客服客户端发给设备的指令类消息

    1、给好友发消息任务 TalkToFriendTask = 1070;

    2、发送朋友圈任务 PostSNSNewsTask = 1071;

    3、主动添加好友任务 AddFriendsTask = 1072;

    4、发送朋友圈任务后数据回传 PostSNSNewsTaskResultNotice = 1073;

    5、删除朋友圈 DeleteSNSNewsTask = 1074;

    6、客户端或者服务端接受好友请求通知 AcceptFriendAddRequestTask = 1075;

    7、群发消息任务 WeChatGroupSendTask = 1076;

    8、执行养号动作命令 WeChatMaintenanceTask = 1077;

    9、请求图片或视频消息的详细内容 RequestTalkDetailTask = 1078;

    10、服务端主动要求手机上传当前登录的微信二维码 PullWeChatQrCodeTask = 1079;

    11、触发手机推送好友列表任务 TriggerFriendPushTask = 1080;

    12、触发手机推送朋友圈列表任务 TriggerCirclePushTask = 1081;

    13、朋友圈评论删除任务 CircleCommentDeleteTask = 1082;

    14、朋友圈评论删除任务反馈 CircleCommentDeleteTaskResultNotice = 1083;

    15、朋友圈评论回复任务 CircleCommentReplyTask = 1084;

    16、朋友圈评论回复反馈 CircleCommentReplyTaskResultNotice = 1085;

    17、通知手机将某个聊天窗口置为已读 TriggerMessageReadTask = 1086;

    18、消息撤回 RevokeMessageTask = 1087;

    19、转发消息 ForwardMessageTask = 1088;

    20、通知手机推送聊天记录 TriggerHistoryMsgPushTask = 1089;

    21、获取群聊二维码 PullChatRoomQrCodeTask = 1090;

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    5、服务端通知执行的命令

    1、服务端通知pc客户版本升级 UpgradeAppNotice = 1093;

    2、通知手机客户端软件升级 UpgradeDeviceAppNotice = 1094;

    3、清粉任务 PostFriendDetectTask = 1095;

    4、终止清粉任务 PostStopFriendDetectTask = 1096;

    5、删除设备通知 PostDeleteDeviceNotice = 1097;

    6、朋友圈点赞任务 PostMomentsPraiseTask = 1098;

    7、停止朋友圈点赞任务 PostStopMomentsPraiseTask = 1099;

    8、养号任务停止 PostStopWeChatMaintenanceTask = 1100;

    9、修改备注任务 ModifyFriendMemoTask = 1101;

    10、领取红包或转账 TakeLuckyMoneyTask = 1200;

    11、获取指定好友朋友圈 PullFriendCircleTask = 1201;

    12、获取朋友圈图片 PullCircleDetailTask = 1202;

    13、单条朋友圈点赞任务 CircleLikeTask = 1203;

    14、触发手机推送群聊列表 TriggerChatroomPushTask = 1210;

    15、请求具体群聊的详细信息 RequestChatRoomInfoTask = 1211;

    16、获取联系人详细信息(不一定是好友,如群聊成员) RequestContactsInfoTask = 1212;

    17、群聊管理 ChatRoomActionTask = 1213;

    18、群内加好友 AddFriendInChatRoomTask = 1214;

    19、通讯录加好友 AddFriendFromPhonebookTask = 1215;

    20、删除好友 DeleteFriendTask = 1216;

    21、发红包 SendLuckyMoneyTask = 1217;

    22、获取聊天消息的原始内容(主要是xml内容) RequestTalkContentTask = 1218;

    23、返回聊天消息的原始内容 RequestTalkContentTaskResultNotice = 1219;

    24、转发消息内容 ForwardMessageByContentTask = 1220;

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    6、手机端主动发出的交互类消息

    1、手机端推送好友列表 FriendPushNotice = 2026;

    2、手机端推送当前安装版本 PostDeviceInfoNotice = 2027;

    3、手机端回传检测清粉好友数 PostFriendDetectCountNotice = 2028;

    4、手机回传朋友圈数据 CirclePushNotice = 2029;

    5、手机回传朋友圈点赞数量 PostMomentsPraiseCountNotice = 2030;

    9、手机端推送群聊列表 ChatroomPushNotice = 2031;

    7、手机端推送标签列表 ContactLabelInfoNotice = 2032;

    8、推送历史消息 HistoryMsgPushNotice = 2033;

    9、群成员(陌生人)信息 ChatRoomMembersNotice = 2034;

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    case HeartBeatReq: {// 客户端发送的心跳包
    heartBeatReqHandler.handleMsg(ctx, msgVo);
    break;
    }
    case DeviceAuthReq: {// 设备客户端授权 设备(手机客户端、客服客户端)获取通信token请求
    deviceAuthReqHandler.handleMsg(ctx, msgVo);
    break;
    }
    case AccountForceOfflineNotice: {// 设备账号强制下线通知
    accountForceOfflineNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    ///////// 手机客户端通知类消息 start///////////
    case WeChatOnlineNotice: {// 手机客户端微信上线通知
    weChatOnlineNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case WeChatOfflineNotice: {// 手机客户端微信下线通知
    weChatOfflineNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case FriendAddNotice: {// 微信个人号新增好友通知
    friendAddNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case FriendDelNotice: {// 微信个人号移除好友通知
    friendDelNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case FriendTalkNotice: {// 微信好友发来聊天消息
    friendTalkNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case TaskResultNotice: {// 任务执行结果通知
    taskResultNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case WeChatTalkToFriendNotice: {// 手机上回复好友的聊天消息
    weChatTalkToFriendNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case FriendAddReqeustNotice: {// 有好友请求添加好友的通知
    friendAddReqeustNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case TalkToFriendTaskResultNotice: {// 手机端向服务端通知聊天执行结果
    talkToFriendTaskResultNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case RequestTalkDetailTaskResultNotice: {// 图片或视频消息的详细内容结果
    requestTalkDetailTaskResultNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PullWeChatQrCodeTaskResultNotice: {// 上传手机客户端上微信的二维码
    pullWeChatQrCodeTaskResultNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case CircleNewPublishNotice: {// 手机上发送了朋友圈通知
    circleNewPublishNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case CircleDelNotice: {// 手机上删除朋友圈通知
    circleDelNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case CircleLikeNotice: {// 手机检测到有人点赞/取消点赞通知
    circleLikeNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case CircleCommentNotice: {// 手机检测到有人评论/删除朋友圈通知
    circleCommentNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case CircleCommentReplyTaskResultNotice: {// 朋友圈评论回复反馈
    circleCommentReplyTaskResultNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case CircleCommentDeleteTaskResultNotice: {// 朋友圈评论删除任务反馈
    circleCommentDeleteTaskResultNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PostFriendDetectCountNotice: {// 手机端回传检测清粉好友数
    postFriendDetectCountNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case CirclePushNotice: {// 手机回传朋友圈数据
    circlePushNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PostMomentsPraiseCountNotice: {// 手机回传朋友圈点赞数
    postMomentsPraiseCountNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PostMessageReadNotice: {// 手机端微信 消息标记为已读
    postMessageReadNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    ///////////////////// 手机客户端通知类消息 end////////////////
    //////////////////////客服pc客户端发给设备的指令类消息 start//////////////////////////
    case TalkToFriendTask: {// 给好友发消息任务
    talkToFriendTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PostSNSNewsTask: {// 发送朋友圈任务
    postSNSNewsTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case AddFriendsTask: {// 主动添加好友任务
    addFriendsTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PostSNSNewsTaskResultNotice: {// 发送朋友圈任务后数据回传
    postSNSNewsTaskResultNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case DeleteSNSNewsTask: {// 删除朋友圈
    deleteSNSNewsTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case AcceptFriendAddRequestTask: {// 客户端或者服务端接受好友请求通知
    acceptFriendAddRequestTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case WeChatGroupSendTask: {// 群发消息任务
    weChatGroupSendTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case WeChatMaintenanceTask: {// 执行养号动作命令
    weChatMaintenanceTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PostStopWeChatMaintenanceTask: {// 养号任务停止
    postStopWeChatMaintenanceTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case RequestTalkDetailTask: {// 请求图片或视频消息的详细内容
    requestTalkDetailTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PullWeChatQrCodeTask: {// 服务端主动要求手机上传当前登录的微信二维码
    pullWeChatQrCodeTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case TriggerFriendPushTask: {// 触发手机推送好友列表任务
    triggerFriendPushTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case FriendPushNotice: {// 手机端推送好友列表
    friendPushNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case TriggerCirclePushTask: {// 触发手机推送朋友圈列表任务
    triggerCirclePushTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case CircleCommentDeleteTask: {// 朋友圈评论删除任务
    circleCommentDeleteTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case CircleCommentReplyTask: {// 朋友圈评论回复任务
    circleCommentReplyTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PostFriendDetectTask: {// 清粉任务
    postFriendDetectTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PostStopFriendDetectTask: {// 终止清粉任务
    postStopFriendDetectTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PostMomentsPraiseTask: {// 朋友圈点赞任务
    postMomentsPraiseTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case PostStopMomentsPraiseTask: {// 停止朋友圈点赞任务
    postStopMomentsPraiseTaskHandler.handleMsg(ctx, msgVo);
    break;
    }
    case GetWeChatsReq: {// 拉取当前微信个人号列表请求
    getWeChatsReqHandler.handleMsg(ctx, msgVo);
    break;
    }
    case SyncFriendMessageAsyncReq: {// 同步好友消息数据请求
    syncFriendMessageAsyncReqHandler.handleMsg(ctx, msgVo);
    break;
    }
    case AccountLogoutNotice: {//pc客户端退出通知
    accountLogoutNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case WeChatLoginNotice: {//pc客户端选择微信号登陆/登出通知
    weChatLoginNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    case ReadChatMessageNotice: {//pc客户端 标记消息已读
    readChatMessageNoticeHandler.handleMsg(ctx, msgVo);
    break;
    }
    /////////客服客户端发给设备的指令类消息 end//////////////////////////
    //////////////其他公共消息处理start//////////////////////////////////////
    case MsgReceivedAck: {//消息接收确认回复(接收或拒绝接收)
    msgReceivedAckHandler.handleMsg(ctx, msgVo);
    break;
    }

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口,SDK的功能API列表

    微信加好友功能API

    1、导入手机通讯录

    2、手机通讯录加好友

    3、加指定微信群好友

    4、自动通过微信好友请求

    5、手机模拟定位

    6、附近人加好友

    7、各种账号加好友(QQ号、手机号、微信号)

    8、陌陌自动回复引流加好友

    9、探探自动回复引流加好友

    10、摇一摇打招呼加好友

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    微信群发功能API

    1、微信群发好友(文字、图片、长短视频、链接、名片)

    2、微信群发群(文字、图片、长短视频、链接、名片)

    3、微信群发收藏(文字、图片、长短视频、链接、名片)

    4、按标签群发、指定好友群发

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    微信群管理功能API

    1、入群欢迎语

    2、指定群管理员

    3、群管理统计(活跃度、发言数、总人数、邀请数、退出数等)

    4、群管理员踢人、群消息警告

    5、群关键词回复,群智能客服

    6、建群、拉人功能接口

    7、多群消息同步

    8、群成员关系链

    9、群二维码、群公告

    10、群资料整理

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    微信营销功能API

    1、发朋友圈(图文、链接、长短视频)

    2、发长视频到微信朋友圈

    3、朋友圈点赞,按比例点赞,按数量点赞

    4、发漂流瓶信息

    5、智能自动回复

    6、同步指定微信好友朋友圈

    7、红包、转账

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    微信聊天对话功能API

    1、微信上线通知

    2、微信下线通知

    3、微信新增好友通知

    4、微信删除好友通知

    5、微信好友发来信息通知

    6、回复微信好友聊天消息、聊天消息撤回

    7、聊天执行结果通知

    8、获取微信通讯录好友列表

    9、获取群列表

    10、好友请求添加好友的通知

    11、获取手机客户端上微信的二维码

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    微信营销辅助工具API

    1、打开微信

    2、定时执行任务

    3、任务执行结果通知

    4、清理僵尸粉

    5、清理微信空间

    6、智能随机养号

    7、智能抢红包服务

    8、微信运动智能点赞

    9、提取指定朋友圈内容

    10、关注指定公众号

    个人微信开发api文档,个人微信开发sdk,个人微信开发协议接口
    永久地址 https://www.wuliaokankan.cn/url301/138.html

    posted @ 2019-05-23 16:52 微信客服scrm研究中心 阅读(...) 评论(...) 编辑 收藏
    展开全文
  • //php插件下载地址: https://files.cnblogs.com/files/fan-bk/jssdk_php.rar //建立一个php文件 require_once &quot;jssdk_php/jssdk.php&quot;; //引入下载的PHP插件 $jssdk = new JSSDK(&quot;这里...
    <?php
    //php插件下载地址: https://files.cnblogs.com/files/fan-bk/jssdk_php.rar
    //建立一个php文件
    require_once "jssdk_php/jssdk.php";  //引入下载的PHP插件
    $jssdk = new JSSDK("这里填写appid","这里填写密匙");//填写公众号 密匙
    $signPackage = $jssdk->GetSignPackage();
    ?>
    <!DOCTYPE html>
    <html>
    <body>
     <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
     <script>
     wx.config({
       debug: false,  //调式模式,设置为ture后会直接在网页上弹出调试信息,用于排查问题
       appId: '<?php echo $signPackage["appId"];?>',
       timestamp: <?php echo $signPackage["timestamp"];?>,
       nonceStr: '<?php echo $signPackage["nonceStr"];?>',
       signature: '<?php echo $signPackage["signature"];?>',
       jsApiList: [ // 所有要调用的 API 都要加到这个列表中
           'checkJsApi',
           'openLocation',
           'getLocation'
     
       ]
     });
     wx.ready(function () {  
     
    wx.checkJsApi({
        jsApiList: [
            'getLocation'
        ],
        success: function (res) {
            // alert(JSON.stringify(res));
            // alert(JSON.stringify(res.checkResult.getLocation));
            if (res.checkResult.getLocation == false) {
                alert('你的微信版本太低,不支持微信JS接口,请升级到最新的微信版本!');
                return;
            }
        }
    });
    wx.getLocation({
        success: function (res) {
            var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
            var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
            var speed = res.speed; // 速度,以米/每秒计
            var accuracy = res.accuracy; // 位置精度
            alert(latitude+','+longitude+','+accuracy);
        },
        cancel: function (res) {
            alert('用户拒绝授权获取地理位置');
        }
    });
     
    });       
    wx.error(function (res) {
     //alert(res.errMsg);  //打印错误消息。及把 debug:false,设置为debug:ture就可以直接在网页上看到弹出的错误提示
    });
     </script>
    </body>
    </html>
    

    微信导入包:https://pan.baidu.com/s/1MV-C8AADfRBkgoibYVFwhQ

    展开全文
  • 本文目录 : ...获取用户详细信息列表,有人会说直接去微信开发文档找到对应的Api不就得了,还有什么东西可写? 首先,微信没有直接提供这样的Api,所以只能将相关的接口进行组合使用。姑且做一下开发记录。

    本文目录 :

    1. 获取access_token
    2. 获取用户id列表
    3. 获取单用户详细信息
    4. 综合获取用户详细列表
    5. 代码结构组织

    php框架:Thinkphp
    主题任务:微信公众平台开发,获取用户详细信息列表。

    获取用户详细信息列表,有人会说直接去微信开发文档找到对应的Api不就得了,还有什么东西可写?
    首先,微信没有直接提供这样的Api,所以只能将相关的接口进行组合使用。姑且做一下开发记录。


    1、 获取access_token

    微信开发文档入口:

    https://mp.weixin.qq.com/wiki?action=doc&id=mp1421140183

    我的代码:

    public function getAccessToken()
    {
        $wechat = $this->wx_user; //$this->wx_user:已从数据库中取出所需公众号信息
        if (empty($wechat)) {
            $this->setError("公众号不存在!");
            return false;
        }
    
        //判断是否过了缓存期
        $expire_time = $wechat['web_expires'];
        if($expire_time > time()){
           return $wechat['web_access_token'];
        }
    
        //调用微信提供的接口获取数据
        $appid = $wechat['appid'];
        $appsecret = $wechat['appsecret'];
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
        $return = httpRequest($url,'GET');
        if (empty($return)) {
            $this->setError("请求失败,获取access_token失败");
            return false;
        }
    
        $return = json_decode($return, true);
        if (isset($return['errcode']) && $return['errcode'] != 0) {
            $this->setError("get_access_token 错误代码;".$return['errcode']);
            return false;
        }
    
        //设置过期时间,保存进数据库,下次判断数据库中的时间是否过期,如上面代码所示
        $web_expires = time() + 7000; // 提前200秒过期
        M('wx_user')->where(array('id'=>$wechat['id']))->save(array('web_access_token'=>$return['access_token'],'web_expires'=>$web_expires));
        return $return['access_token'];
    }

    上面涉及到access_token的过期刷新方案。
    因为每次从微信服务器拉取access_token时,之前用的access_token就没用了,也不是立即没用,会有个短暂的过渡期,但这个过渡期基本可以忽略不计。所以,总不能每次都生成新的access_token吧?所以要判断过期时间,在过期之前就只用保存的access_token。

    这里面还有一个问题,就是如果很多人同时都在操作这个公众号的api,那么,在过期临界点的时候会有多次拉取新access_token的现象,导致有些先拉取access_token的操作会失败,所以,微信官方建议使用AccessToken中控服务器进行集中获取access_token,所以现在就只有中控服务器拉取access_token,没人跟它竞争,不会出现上述描述的场景,放一下官方建议的解决方案图:

    因为项目这里是后台操作,一般只是管理员在操作,上述场景的情况几乎不会出现,所以简单场景应用简单解决方案。


    2、 获取用户id列表

    微信开发文档入口:

    https://mp.weixin.qq.com/wiki?action=doc&id=mp1421140840

    我的代码:

    public function getFanIdList($next_openid='')
    {
        $access_token = $this->getAccessToken();
        if (!$access_token) {
            return false;
        }
    
        //调用微信提供的接口获取数据
        $url ="https://api.weixin.qq.com/cgi-bin/user/get?access_token={$access_token}&next_openid={$next_openid}";//重头开始拉取,一次最多拉取10000个
        $return = httpRequest($url);
        $list = json_decode($return, true);
        if (isset($list['errcode']) && $list['errcode'] != 0) {
            $this->setError("错误代码:".$list['errcode']);
            return false;
        }
        return $list;
    }

    获取的数据如下:

    //上边返回的$list[]元素:
    //total 关注该公众账号的总用户数
    //count 拉取的OPENID个数,最大值为10000
    //data  列表数据,OPENID的列表
    //next_openid   拉取列表的最后一个用户的OPENID
    //样本数据:
    {"total":2,"count":2,"data":{"openid":["OPENID1","OPENID2"]},"next_openid":"NEXT_OPENID"}

    可以看到,这里只提供了openid,我们要用这个openid去查询相应的粉丝详细信息。
    题外话 :
    微信目前拉取上述用户列表,一次只能拉取10000个用户。看微信的接口约束手册中,哦,接口约束手册描述接口单日可用最大次数,可以看到,获取单用户的详细信息的最大次数是拉取用户列表的最大次数的10000倍,我想这里的10000倍不是巧合。

    约束手册入口:

    https://mp.weixin.qq.com/wiki?action=doc&id=mp1433744592


    3、 获取单用户详细信息

    微信开发文档入口:

    https://mp.weixin.qq.com/wiki?action=doc&id=mp1421140839

    我的代码:

    public function getFanInfo($openid, $access_token=null)
    {
        if (null === $access_token) {
            $access_token = $this->getAccessToken();
            if (!$access_token) {
                return false;
            }
        }
    
        //调用微信提供的接口获取数据
        $url ="https://api.weixin.qq.com/cgi-bin/user/info?access_token={$access_token}&openid={$openid}&lang=zh_CN";
        $return = httpRequest($url);
        $wxdata = json_decode($return, true);
        if (isset($wxdata['errcode']) && $wxdata['errcode'] != 0) {
            $this->setError("错误代码;".$wxdata['errcode']);
            return false;
        }
    
        $wxdata['sex_name'] = $this->sexName($wxdata['sex']);
        return $wxdata;
    }
    
    public function sexName($sex_id)
    {
        if ($sex_id == 1) {
            return '男';
        } else if ($sex_id == 2) {
            return '女';
        }
        return '未知';
    }

    上面返回的数据结构如下:

    /* $wxdata[]元素:
     * subscribe    用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
     * openid   用户的标识,对当前公众号唯一
     * nickname 用户的昵称
     * sex  用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
     * city 用户所在城市
     * country  用户所在国家
     * province 用户所在省份
     * language 用户的语言,简体中文为zh_CN
     * headimgurl   用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
     * subscribe_time   用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
     * unionid  只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
     * remark   公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
     * groupid  用户所在的分组ID(兼容旧的用户分组接口)
     * tagid_list   用户被打上的标签ID列表
     */


    4、 综合获取用户详细列表

    我的代码:

    public function fans_list()
    {
        $wechatObj = new WechatLogic($this->wx_user);
        $access_token = $wechatObj->getAccessToken();
        if (!$access_token) {
            return $this->error($wechatObj->getError());
        }
    
        $next_openid = '';
        $p = intval(I('get.p')) ?: 1;
        for ($i = 1; $i <= $p; $i++) {
            $id_list = $wechatObj->getFanIdList($next_openid);
            if ($id_list === false) {
                return $this->error($wechatObj->getError());
            }
            $next_openid = $id_list['next_openid'];
        }
    
        $user_list = [];
        foreach ($id_list['data']['openid'] as $openid) {
            $user_list[$openid] = $wechatObj->getFanInfo($openid, $access_token);
            if ($user_list[$openid] === false) {
                return $this->error($wechatObj->getError());
            }
            $user_list[$openid]['tags'] = $wechatObj->getFanTagNames($user_list[$openid]['tagid_list']);
            if ($user_list[$openid]['tags'] === false) {
                return $this->error($wechatObj->getError());
            }
        }
    
        $page  = new Page($id_list['total'], $id_list['count']);
        $show = $page->show();
        $this->assign('pager',$page);
        $this->assign('page',$show);
        $this->assign('user_list', $user_list);
        return $this->fetch();
    }

    上面代码是有视图输出的,主要提供一种思路。

    里边涉及到的其他代码:
    涉及到获取公众号的用户标签,文档入口:

    https://mp.weixin.qq.com/wiki?action=doc&id=mp1421140837

    /**
     * 获取粉丝标签
     * @return type
     */
    public function getAllFanTags()
    {
        $access_token = $this->getAccessToken();
        if (!$access_token) {
            return false;
        }
    
        //调用微信提供的接口获取数据
        $url = "https://api.weixin.qq.com/cgi-bin/tags/get?access_token={$access_token}";
        $return = httpRequest($url);
        $wxdata = json_decode($return, true);
        if (isset($wxdata['errcode']) && $wxdata['errcode'] != 0) {
            $this->setError("错误代码;".$wxdata['errcode']);
            return false;
        }
    
        //$wxdata数据样例:{"tags":[{"id":1,"name":"每天一罐可乐星人","count":0/*此标签下粉丝数*/}, ...]}
        return $wxdata['tags'];
    }
    
    /**
     * 获取所有用户标签
     * @return array
     */
    public function getAllFanTagsMap()
    {
        if ($this->tags_map !== null) {
            return $this->tags_map;
        }
    
        $user_tags = $this->getAllFanTags();
        if ($user_tags === false) {
            return false;
        }
    
        $this->tags_map = [];
        foreach ($user_tags as $tag) {
            $this->tags_map[$tag['id']] = $this->tags_map[$tag['name']];
        }
        return $this->tags_map;
    }
    
    /**
     * 获取粉丝标签名
     * @param string $tagid_list
     * @param array $tags_map
     * @return array
     */
    public function getFanTagNames($tagid_list)
    {
        if ($this->tags_map === null) {
            $tags_map = $this->getAllFanTagsMap();
            if ($tags_map === false) {
                return false;
            }
            $this->tags_map = $tags_map;;
        }
    
        $tag_names = [];
        foreach ($tagid_list as $tag) {
            $tag_names[] = $this->tags_map[$tag];
        }
        return $tag_names;
    }


    5、 代码结构组织

    1. 因为调用官方接口如果出错,会有错误码和错误信息,可帮助定位问题,为了不浪费这个信息,做了setError()getError()这两个小函数记录,上面已多次使用。
    2. 除了最后的综合使用的业务函数之外,其他都是微信的常规操作,都放在一个微信的常规操作类WechatLogic里边,可以给多个业务使用。


    总结
    其实只要看看官方的手册,找到自己想要的接口,如果找不到直接的接口,就自己拼凑即可。


    主要参考文档

    微信开发入门:https://mp.weixin.qq.com/wiki?action=doc&id=mp1472017492_58YV5
    微信开发文档:https://mp.weixin.qq.com/wiki

    -end-

    展开全文
  • private function receiveEvent($object) { $contentStr = ""; switch ($object->Event) { case "subscribe": $contentStr = "欢迎关注方倍工作室"; break; case "LOCAT
  • 此代码用于微信小程序根据定位获取城市信息,用户取消定位后,再次申请授权定位 小程序JS代码块: // pages/index/city/city.js const app = getApp() Page({ /** * 页面的初始数据 */ data: { }, ...
  • 最近学习了关于微信公众号开发的相关知识,为了帮助自己更好的理解,在此重新再梳理一遍 更多关于微信公众号开发的功能可以参考微信公众平台的开发技术文档
  • 文章目录公众号的分类微信公众平台:编辑模式开发模式开发模式配置流程1.登录测试号页面,可以看到该测试号相关的信息2.配置参数介绍3.搭建本地应用(java/python/php等语言均可)4.URL接入验证 公众号的分类 微信公众...
  • ThinkPHP5.0微信开发之获取用户地理位置
  • 先用微信sdk的定位功能,获取到用户的经纬度  2.把经纬度通过百度地图接口转换经纬度  3.通过百度地图接口,通过转换后的经纬度获取对应的位置信息 一.微信公众好SDK使用 步骤一:绑定域名 先登录微信公众...
  • 项目中需要使用到定位功能,定位用户所在的省市,并自动填充到省市的选择列表中,微信开发中,定位功能直接使用微信提供的接口,方便并且简单,兼容性相对好处理 因为微信定位或者百度地图的定位都是先通过定位获取...
  • 今天说说微信网页开发中一下JS的功能,分享一下,希望...微信开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115来看看效果图: 1:引入JS文件2:config接口注入权限验证配置 wx.config({
  • 微信公众平台获取微信订阅用户(粉丝)的openid在公众号的开发中有很多用途,包括给订阅用户发送消息,包括各种消息、模版消息等。在这里向需要获取openid的开发人员分享一下简单的流程及部分代码,和一些问题的解决...
  • Python 微信公众号开发

    2018-01-24 22:16:04
    大三上的时候,对微信公众号开发浅尝辄止的玩了一下,感觉还是挺有意思的。http://blog.csdn.net/marksinoberg/article/details/54235271 后来服务器到期了,也就搁置了。由于发布web程序,使用PHP很顺手,就使用了...
  • 因为工作的需要,这一两年对微信公众号和小程序,项目制作的比较多。...对于微信开发,其实最主要的就是阅读微信开发者文档,并细心的书写和替换变量,还有就是会细致的去调试错误,慢慢达到自己的要...
  • 那么,我们怎么去获取用户的地理位置定位呢?  可以采用百度地图接口获取用户的地理位置定位。要使用该服务,你得先注册成为百度地图开发者。http://lbsyun.baidu.com/ 百度地图开放平台地址  注册成为开发者后...
  • 这两天做微信公众平台的时候遇到一个进入网页进行用户定位的功能,由于各方面原因,没有去使用微信提供的js定位。以前也没做过微信相关的开发-加之微信官方提供的API文档着实看着蛋疼,苦思无果,终于在第三天某位...
1 2 3 4 5 ... 20
收藏数 5,698
精华内容 2,279
关键字:

php微信开发怎么调试用户定位