微信分享朋友圈,好友,qq, 微博 前端和后端,亲测好用 thinkphp

1. wx.share_data.js 获取时间戳,签名,等

var wxdata = {
    wx_account : new Array(4),
    wx_share : new Array(4),
    wx_myuser : "wxa6124505106149b3",
    access_token : "", // 凭证
    token_expires_in : "" , // 凭证过期时间 单位:s
    jsapi_ticket : "", // 凭证
    ticket_expires_in : "" , // 凭证过期时间 单位:s
    signature:'',
    url : "https://wx.zhixiaobing.com/index.php?m=&c=api&a=accessToken"    
    }

//获取ticket
get_jsapi_ticket();  //3

var timestamp = create_timestamp();   // timestamp
var noncestr = create_noncestr();  // noncestr
var url = window.location.href;
console.log(wxdata.jsapi_ticket)
create_signature(noncestr,wxdata.jsapi_ticket,timestamp,url);
wxdata.wx_account[0] = wxdata.wx_myuser;  // appid
wxdata.wx_account[1] = timestamp;   // timestamp
wxdata.wx_account[2] = noncestr; // noncestr
wxdata.wx_account[3] = wxdata.signature//signature


    // 获取jsapi_ticket
    // *注意* 经过实际开发测试,微信分享不支持跨域请求,因此获取jsapi_ticket的请求必须从服务器发起,否则无法获取到jsapi_ticket
     function get_jsapi_ticket (){
         var access_token='';
        // 获取access_token  
    // *注意* 经过实际开发测试,微信分享不支持跨域请求,因此获取access_token的请求必须从服务器发起,否则无法获取到access_token

       $.ajax({
            type : "GET",
            url :  wxdata.url,
            // dataType : "jsonp",  // 解决跨域问题,jsonp不支持同步操作
            // cache : false,    
            async : false,    
            success : function(res) {
                // console.log(res)
                // res = JSON.parse(res);
                access_token = res.access_token;  // 获取到的交互凭证  需要缓存,存活时间token_expires_in  默认为7200s
                if (wxdata.access_token != "" || wxdata.access_token != null) {
                    console.log("get access_token  success: " + wxdata.access_token);
                } else {
                    console.log("get access_token  fail " +wxdata.access_token);
                }

                $.ajax({
                    type : "GET",
                    url : "https://www.abc.com?access_token="+access_token,
                    // dataType : "jsonp",
                    // cache : false,
                    async : false,
                    // jsonp :'callback',
                    success : function(res) {

                        if(res.ticket){
                            console.log(wxdata.jsapi_ticket )
                            wxdata.jsapi_ticket = res.ticket;  //
                            console.log("get jsapi_ticket  success");
                        } else {
                            console.log("get jsapi_ticket  fail");
                        }
                    },
                    error : function(res){
                        console.log("get jsapi_ticket  error!!! ");
                    }
                });
            },
            error : function(res){
                console.log("get access_token error!! ");
            }
        });

        
    }
    // 数据签名
     function create_signature(noncestr,ticket,timestamp,url){
         console.log(ticket)
        // 这里参数的顺序要按照 key 值 ASCII 码升序排序
        var s = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url;
        $.ajax({
            // 这时必须是post 否则地址会出错
            type : "post",
            url : "https://www.abc.com",
            data:{signature:s},
            // dataType : "jsonp",
            // cache : false,
             async : false,
            // jsonp :'callback',
            success : function(res) {
                console.log(res)
                wxdata.signature=res.signature;
                
            },
            error : function(res){
                console.log("get signature  error!!! ");
            }
        });
        return
    }
 
    // 自定义创建随机串 自定义个数0 < ? < 32
    function create_noncestr() {
             var str= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
             var val = "";
            for (var i = 0; i < 16; i++) {
                 val += str.substr(Math.round((Math.random() * 10)), 1);
             }
        return val;
    }
    
    // 自定义创建时间戳
     function create_timestamp() {
        return new Date().getSeconds();
    }
    

2、htlml 里这样写


 

<script src="__STATIC__/js/wxshare/wxShare_data.js"></script>
<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

<script type="text/javascript">
var ShareLink =window.location.href; //默认分享链接
var ShareImgUrl = "图片地址";// 分享图标
var ShareDesc= '分享描述';
var ShareTitle='分享标题';
//var is_distribut = getCookie('is_distribut'); // 是否分销代理

//var user_id = getCookie('user_id'); // 当前用户id
//alert(is_distribut+'=='+user_id);

// 如果已经登录了, 并且是分销商
// if(parseInt(is_distribut) == 1 && parseInt(user_id) > 0)
// {                 
//   ShareLink = ShareLink + "&first_leader="+user_id;                 
// }                 
  var wx_account = wxdata.wx_account; // 自定义数据,见wxShare_data.js

//配置微信信息
wx.config ({
    debug : false,    // true:调试时候弹窗
    appId : wx_account[0],  // 微信appid
    timestamp : wx_account[1], // 时间戳
    nonceStr : wx_account[2],  // 随机字符串
    signature : wx_account[3], // 签名
    jsApiList : [
        // 所有要调用的 API 都要加到这个列表中
        'onMenuShareTimeline',       // 分享到朋友圈接口
        'onMenuShareAppMessage',  //  分享到朋友接口
        'onMenuShareQQ',         // 分享到QQ接口
        'onMenuShareWeibo'      // 分享到微博接口
    ]
});

wx.ready (function () {
    // 微信分享的数据
    var shareData = {
        "imgUrl" : ShareImgUrl,    // 分享显示的缩略图地址
        "link" : ShareLink,    // 分享地址
        "desc" : ShareDesc,   // 分享描述
        "title" :ShareTitle,   // 分享标题
      }
       wx.onMenuShareTimeline (shareData);
       wx.onMenuShareAppMessage (shareData);
       wx.onMenuShareQQ (shareData);
       wx.onMenuShareWeibo (shareData);
     //   success:function () {  
 
     //           // 分享成功可以做相应的数据处理
 
     //          //alert("分享成功"); }
     // }
});
 
 
wx.error(function(res){
     // config信息验证失败会执行error函数,如签名过期导致验证失败,
    // 具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,
     //对于SPA可以在这里更新签名。
    console.log("好像出错了!!");
});
 
</script>

 

3 、php 代码


 

// 获取accessToken
    public function accessToken()
    {   

        header("Access-Control-Allow-Origin: *");
        //公众号 appid 和秘钥
        $appid = 'xxxxxxxxxxxxxx';
        $appsecret = 'xxxxxxxx';
        // AppID 和 AppSecret 可登录微信公众平台官网-设置-开发设置中获得(需要已经绑定成为开发者,且帐号没有异常状态)
        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
        $res = httpGet($url);
        $res = json_decode($res);
        // session(array('accessToken'=>$res->access_token,'expire'=>7200));
        // dump($res->access_token);
        $this->ajaxreturn($res) ;
    }

    public function jsapiTicket($value='')
    {   
        header("Access-Control-Allow-Origin: *");
        $accessToken=I('get.access_token');
        $url='https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$accessToken.'&type=jsapi';
        $res = httpGet($url);
        $res = json_decode($res);
       // session(array('jsapiTicket'=>$res->ticket,'expire'=>7200));
        $this->ajaxreturn($res) ;


    }

    public function signature()
    {   
        header("Access-Control-Allow-Origin: *");
        $string = I('post.signature');
    // $string ="jsapi_ticket=".I('get.jsapi_ticket')."&noncestr=".I('get.noncestr')."&timestamp=".I('get.timestamp')."&url=".I('get.url');
        $signature=sha1($string);
        // dump(array('noncestr'=>$noncestr,'jsapi_ticket'=>$jsapi_ticket,'timestamp'=>$timestamp,'signature'=>$signature));
         $this->ajaxreturn(['signature'=>$signature]) ;
    }

 

httpGet 是自己封装 的curl 函数,网上很多,自己查

完整代码全部在这了,亲测可用

加公众号获取学习资源

 

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 写微信小程序后端需要以下几个步骤: 1. 环境搭建:需要搭建 PHP 环境,安装 ThinkPHP 框架,以及安装微信开发者工具。 2. 注册小程序:在微信公众平台注册小程序,获取小程序的 AppID 和 AppSecret,用于后续开发中的身份验证和 API 调用。 3. 配置接口:在微信公众平台中配置小程序的接口信息,包括接口地址、Token、EncodingAESKey 等信息。 4. 开发 API:根据小程序需求,设计并开发相应的 API 接口,可以使用 ThinkPHP 提供的 RESTful API 快速搭建。 5. 身份验证:在开发 API 的过程中,需要对请求进行身份验证,确保只有授权的用户可以访问相应的 API。 6. 数据库操作:使用 ThinkPHP 提供的数据库操作接口,对数据库进行增、删、改、查等操作。 7. 返回数据:在 API 接口的实现中,需要将查询到的数据返回给小程序端。可以使用 JSON 格式或其他格式。 8. 调试和部署:在开发过程中,需要进行调试和试。当试通过后,可以将代码部署到服务器上,供小程序调用。 总的来说,使用 ThinkPHP 开发微信小程序后端,需要掌握 PHP 开发技术和数据库操作技术,并熟悉微信小程序开发的流程和接口调用方式。 ### 回答2: thinkphp是一款基于PHP语言开发的MVC框架,用于构建Web应用程序。如果我们想要使用thinkphp来开发微信小程序的后端,我们可以按照以下思路进行: 1. 搭建开发环境:首先,我们需要在本机搭建PHP开发环境,并安装thinkphp框架。可以使用XAMPP、WAMP或者LAMP等工具来搭建环境,并从thinkphp官方网站下载最新版本的框架。 2. 创建项目和模块:在thinkphp框架中,我们可以使用命令行工具或者手动创建来创建一个新的项目。然后,我们可以根据微信小程序的需求,创建相应的控制器、模型和视图等模块。 3. 配置数据库连接:在thinkphp的配置文件中,我们需要配置数据库连接信息,以便于在后端与数据库进行交互。可以在配置文件中设置数据库的类型、主机地址、数据库名、用户名和密码等。 4. 数据库操作:利用thinkphp提供的ORM(对象关系映射)功能,我们可以通过定义模型类来简化与数据库的交互。可以使用模型中提供的方法来进行数据的增删改查操作,以及数据的关联查询等。 5. 接口开发:对于微信小程序与后端的交互,我们可以定义相应的接口来处理前端的请求。通过接口,前端可以发送HTTP请求到后端,并传递相应的参数。后端可以根据接口进行数据的处理和逻辑的操作,并返回相应的结果给前端。 6. 接口权限验证:在微信小程序中,我们可以使用微信提供的登录机制来获取用户的OpenID,并将其作为用户的唯一标识。在后端接口中,我们可以通过验证用户的OpenID来进行接口权限的控制,确保只有合法的用户才能访问接口。 7. 数据返回格式化:在后端的接口开发过程中,我们需要将数据以统一的格式返回给前端。可以使用thinkphp提供的返回格式封装函数,将数据封装成JSON格式并返回给前端。 总之,使用thinkphp开发微信小程序的后端需要通过搭建开发环境、创建项目和模块、配置数据库连接、数据库操作、接口开发、接口权限验证等步骤。这样,我们就可以基于thinkphp框架来实现微信小程序的后端逻辑和数据交互。 ### 回答3: thinkphp是一款开源的PHP框架,适用于快速开发Web应用程序。如果要使用thinkphp来开发微信小程序的后端,可以按照以下思路进行: 1. 配置环境:首先,确保服务器上已经安装了PHP环境,并下载、安装好thinkphp框架,同时要确保安装了与微信小程序交互的SDK。 2. 数据库设计:根据小程序的需求,设计好数据库的表结构,包括用户表、数据表等。 3. 创建控制器:根据业务逻辑,在thinkphp中创建相应的控制器文件,用于处理来自小程序前端的请求。 4. 实现接口:在控制器中实现与小程序前端交互的接口,包括用户登录、数据查询、数据添加、数据更新等功能。可以使用thinkphp提供的数据库查询方法、数据验证、数据过滤等函数。 5. 用户验证:在接口中实现用户登录验证的逻辑,可以通过小程序前端传递的用户标识进行验证,并同时保存用户信息到数据库中。 6. 数据交互:通过接口,实现小程序前端与后台的数据交互。可以使用thinkphp提供的数据返回函数,将查询到的数据以JSON格式返回给小程序前端。 7. 安全性考虑:在小程序后端开发过程中,需要考虑数据的安全性。可以使用thinkphp的安全函数对接收到的数据进行过滤,避免SQL注入等安全问题。 8. 错误处理:在接口中,加入错误处理机制,对可能出现的错误进行捕获和处理,并返回相应的错误信息给小程序前端。 9. 日志记录:使用thinkphp提供的日志记录功能,对后端的运行情况进行记录,以便后期的排查和调试。 总之,使用thinkphp开发微信小程序的后端,需要根据小程序的需求进行数据库设计,创建相应的控制器文件,实现接口以及相应的业务逻辑,并加入相应的安全性考虑和错误处理机制,以确保小程序后端的稳定性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值