zoukankan      html  css  js  c++  java
  • 微信jssdk中的使用

    1.jssdk使用

       获取地址:

       

     function location(params) {
                    wx.ready(function () {
                        wx.getLocation({
                            type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
                            success: function (res) {
                                var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
                                var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
                                var speed = res.speed; // 速度,以米/每秒计
                                var accuracy = res.accuracy; // 位置精度
                                var str = " 您好!<br>当前位置:<br>纬度:" + res.latitude + "<br>经度:" + res.longitude + "<br>速度:" + res.speed + "<br>精度:" + res.accuracy + "<br>";
                                return str;
                            },
                            fail: function () {
                                //$("#msgDiv").html(userid + " 您好!<br>获取位置信息失败");
                                alert("erro获取位置信息失败");
                            }
                        });
                    });
                 }
    

       在调用之前需要对签名认证:

       

       function init(url) {
                        getConfig(url).then(function (data) {
                            wx.config({
                                debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                                appId: data.appId, // 必填,公众号的唯一标识
                                timestamp: data.timestamp, // 必填,生成签名的时间戳
                                nonceStr: data.nonceStr, // 必填,生成签名的随机串
                                signature: data.signature, // 必填,签名,见附录1
                                jsApiList: ['getLocation'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                            });
                        });
                    }
    

        验证历程(狗血的历程):

            一般验证逻辑是:

                  后台获取:

                    appId = appId,
                    timestamp = timestamp,
                    nonceStr = nonceStr,
                    ticket = ticket,
                    signature = signature

               这里需要HTML前台访问的URL这个URL在微信中调用就是有CODE,STATE的那个URL,

                http://app.xxxxxxx.com/xx/xxx/xxx/index?code=te4pwVnqFuM48OFJUIhJ8Vg2Upc-uWmgR79NNswOi8s&state=1

               把这个URL传回后台得到signature,然后再把:

                     appId = appId,
                    timestamp = timestamp,
                    nonceStr = nonceStr,
                    ticket = ticket,
                    signature = signature

                  传回前台JS处理:

               当执行到:

               

    function location(params) {
                    wx.ready(function () {
                        wx.getLocation({
                            type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
                            success: function (res) {
                                var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
                                var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
                                var speed = res.speed; // 速度,以米/每秒计
                                var accuracy = res.accuracy; // 位置精度
                                var str = " 您好!<br>当前位置:<br>纬度:" + res.latitude + "<br>经度:" + res.longitude + "<br>速度:" + res.speed + "<br>精度:" + res.accuracy + "<br>";
                                return str;
                            },
                            fail: function () {
                                //$("#msgDiv").html(userid + " 您好!<br>获取位置信息失败");
                                alert("erro获取位置信息失败");
                            }
                        });
                    });
                }
    

                就可以通过了

                Angularjs中的应用分主享:

                     其中URL中的参数url=后台的就是上面那个地址

                     return $http({
                            method: 'GET',
                            url: BASE_URL + '/getWXConfig?url=' + encodeURIComponent(url),
                        }).then(function(res) {
                            return res.data;
                        });

                 可以把所有wx.xxxx()全部放到service中调用。

     //微信服务
            .factory("WXServices", ['$http',  'BASE_URL', function ($http,  BASE_URL) {
                    var WXServices = {};
                    WXServices.init = init;
                    WXServices.pay = pay;
                    WXServices.location = location;
                    return WXServices;
                    function init(url) {
                        getConfig(url).then(function (data) {
                            wx.config({
                                debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                                appId: data.appId, // 必填,公众号的唯一标识
                                timestamp: data.timestamp, // 必填,生成签名的时间戳
                                nonceStr: data.nonceStr, // 必填,生成签名的随机串
                                signature: data.signature, // 必填,签名,见附录1
                                jsApiList: ['getLocation'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                            });
                        });
                    }
                   
                 function location(params) {
                    wx.ready(function () {
                        wx.getLocation({
                            type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
                            success: function (res) {
                                var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
                                var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
                                var speed = res.speed; // 速度,以米/每秒计
                                var accuracy = res.accuracy; // 位置精度
                                var str = " 您好!<br>当前位置:<br>纬度:" + res.latitude + "<br>经度:" + res.longitude + "<br>速度:" + res.speed + "<br>精度:" + res.accuracy + "<br>";
                                return str;
                            },
                            fail: function () {
                                //$("#msgDiv").html(userid + " 您好!<br>获取位置信息失败");
                                alert("erro获取位置信息失败");
                            }
                        });
                    });
                }
    
                    function getConfig(url) {
                        return $http({
                            method: 'GET',
                            url: BASE_URL + '/getWXConfig?url=' + encodeURIComponent(url),
                        }).then(function(res) {
                            return res.data;
                        });
                    }
    
                }
            ])
    

     在controller中 调用即可       

     .controller('signCtrl', ['$scope', 'WXServices', '$location', 'BASE_URL', function ($scope,WXServices, $location, BASE_URL) {
                     var vm = this;
                      var absurl = $location.absUrl();
                     var okurl = BASE_URL + pathUrl;
                     var url=absurl.split('#')[0];
                     WXServices.init(url);
                      vm.locationStr=WXServices.location();
              }
            ])
    
     
    

     如果出现:

         {errMsg: "config:invalid signature"}

         {errMsg: "config:fail"}

          检查你的URL与生成signature用的url是否一至

                    appId                timestamp                 nonceStr                ticket          signature

             这几个检也要看一下.

         如果是spa有可能会有#xxx/xxx/xx这一段要去掉

         以上是二天的研究结果,与大家分享!

       my god!

      

  • 相关阅读:
    后CIO人如何规划职业生涯
    数据库设计三大范式应用实例剖析
    一个女孩从软件测试工程师到主管的成长
    一本适合测试初学者阅读的中文译著
    再看微软团队文化
    阳光的测试工作历程(转载)
    hdu 2795
    hdu 2426
    hdu 2255+hdu 3395
    hdu 3729
  • 原文地址:https://www.cnblogs.com/keim/p/6808260.html
Copyright © 2011-2022 走看看