微信开发-关于分享朋友&朋友圈以及录音功能

来源:互联网 发布:淘宝分销店 编辑:程序博客网 时间:2024/04/29 07:03

一.  首先需要在微信公众号中进行配置(其中Token为自定义项)


二. 在配置的域名文件夹下放置checkwei.PHP文件,用来验证配置是否成功。如下:


[php] view plain copy
  1. <?php  
  2. header('Content-type:text');  
  3. define("TOKEN""weixin");  
  4. $wechatObj = new wechatCallbackapiTest();  
  5. if (isset($_GET['echostr'])) {  
  6.     $wechatObj->valid();  
  7. }else{  
  8.     $wechatObj->responseMsg();  
  9. }  
  10.   
  11. class wechatCallbackapiTest  
  12. {  
  13.     public function valid()  
  14.     {  
  15.         $echoStr = $_GET["echostr"];  
  16.         if($this->checkSignature()){  
  17.             header('content-type:text');  
  18.             echo $echoStr;  
  19.             exit;  
  20.         }  
  21.     }  
  22.   
  23.     private function checkSignature()  
  24.     {  
  25.         $signature = $_GET["signature"];  
  26.         $timestamp = $_GET["timestamp"];  
  27.         $nonce = $_GET["nonce"];  
  28.   
  29.         $token = TOKEN;  
  30.         $tmpArr = array($token$timestamp$nonce);  
  31.         sort($tmpArr, SORT_STRING);  
  32.         $tmpStr = implode( $tmpArr );  
  33.         $tmpStr = sha1( $tmpStr );  
  34.   
  35.         if$tmpStr == $signature ){  
  36.             return true;  
  37.         }else{  
  38.             return false;  
  39.         }  
  40.     }  
  41. }  

三.配置js接口安全域名,配置后公众号开发者可在该域名下调用微信开放的JS接口


按照提示进行第三部操作:


四.准备jssdk文件,现已经整理出一个分享的js_sdk包,所以前端同事在做的项目中直接引入这个封装好的包就行,jssdk包无需做任何修改!

(1)前端同事写的页面后缀多为.html或.shtml文件,需将页面的后缀改为.php ,因为在页面中需要嵌入PHP的代码,若是.html,.shtml后缀则无法解析。(该方法比较笨,因为我做的时候用的就是简单的一个页面所以就这样做了)

(2)引入一小段php文件,必须在文件开头引入,因为php规定require一个文件前面不能有任何输出。代码实例如下:

[php] view plain copy
  1. <?php  
  2. require_once "jssdk.php";  
  3. $jssdk=new JSSDK  
  4.  ("wx****************a","86****************************67");  
  5. $signPackage =$jssdk->GetSignPackage();  
  6. ?>  


五.这次主要做的是一个关于微信录音,将录音资源从微信服务器下载到本地服务器的一个过程。不过先将获取用户信息这个步骤代码贴出来:

1.

[html] view plain copy
  1. <span style="white-space:pre">  </span>https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx***********************291&redirect_uri=http://www.demo.com/index.php/Ch/Cms/Uploadwxvoice/index&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect  

2.//通过授权获取用户的信息

     

[php] view plain copy
  1. public function index(){  
  2.             $appid = "wx*********291";   
  3.             $secret = "eb************************23eb2";  
  4.             $code = $_GET["code"];   
  5.               
  6.             //使用code换取oauth2的授权access_token  
  7.             $token_obj = json_decode(file_get_contents('https://api.weixin.qq.com/sns/oauth2/access_token?appid=’.$appid.’ &secret=’.$secret.’ &code='.$code.'&grant_type=authorization_code'));  
  8.             $access_token = $token_obj->access_token;  
  9.             $openid = $token_obj->openid;  
  10.               
  11.             //使用授权Access Token和openid获取用户信息`  
  12.             $user_obj = json_decode(file_get_contents('https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN'));  
  13.               
  14.             //将相关信息存储进session  
  15.             $_SESSION['openid'] = $user_obj->openid;  
  16.             $_SESSION['nickname'] = $user_obj->nickname;  
  17.             $_SESSION['headimgurl'] = $user_obj->headimgurl;  
  18.           
  19.             $this->display();  
  20.               
  21.     }  

六.接下来可以进行调用接口开发。首先配置config项,注册需要调用的接口,

         注意:需要先引入微信js文件


[javascript] view plain copy
  1. <script>  
  2.     //微信分享  
  3.     // var share_image = "";  
  4.     // var share_link = "";  
  5.     // var share_desc = '';  
  6.     // var share_title = '部落PK联盟';  
  7.     wx.config({  
  8.         debug: false,  
  9.         appId: '<?php echo $signPackage["appId"];?>',  
  10.         timestamp: <?php echo $signPackage["timestamp"];?>,  
  11.         nonceStr: '<?php echo $signPackage["nonceStr"];?>',  
  12.             signature: '<?php echo $signPackage["signature"];?>',  
  13.             jsApiList: [  
  14.         // 所有要调用的 API 都要加到这个列表中  
  15.         'onMenuShareAppMessage',//分享朋友  
  16.         'onMenuShareTimeline',///分享朋友圈  
  17.         'startRecord',//开始录音  
  18.         'stopRecord',//停止录音  
  19.         'onVoiceRecordEnd',//监听录音自动停止接口  
  20.         'playVoice',//播放录音  
  21.         'pauseVoice',//暂停云隐接口  
  22.         'stopVoice',//停止播放  
  23.         'onVoicePlayEnd',//  
  24.         'uploadVoice',//上传语音  
  25.         'downloadVoice'//下载语音  
  26.     ]  
  27.     });  
  28.     wx.ready(function () {  
  29.       
  30.       
  31.         //朋友圈  
  32.         wx.onMenuShareTimeline({  
  33.             title:' ',//标题  
  34.             link:'',//链接  
  35.             imgUrl:'',//图片  
  36.             success:function(){  
  37.   
  38.             },  
  39.             cancle:function(){  
  40.   
  41.             }  
  42.   
  43.   
  44.   
  45.         });  
  46.   
  47.         //朋友  
  48.         wx.onMenuShareAppMessage({  
  49.             title:' ',  
  50.             desc:' ',//描述  
  51.             link:'',  
  52.             imgUrl:'',  
  53.             type:'',//分享类型music  不填默认是link  
  54.             dataUrl:'',//如过类型是music  video  需要填写链接  默认为空  
  55.             success:function(){  
  56.   
  57.             },  
  58.             cancle:function(){  
  59.   
  60.             }  
  61.   
  62.   
  63.   
  64.         });  
  65.     if(!localStorage.rainAllowRecord || localStorage.rainAllowRecord !== 'true'){  
  66.     wx.startRecord({  
  67.         success: function(){  
  68.             localStorage.rainAllowRecord = 'true';  
  69.             wx.stopRecord();  
  70.         },  
  71.         cancel: function () {  
  72.             alert('用户拒绝授权录音');  
  73.         }  
  74.     });  
  75. }  
  76.   
  77.         // 4 音频接口  
  78.   // 4.2 开始录音  
  79.   document.querySelector('#startRecord').onclick = function () {  
  80.      START = new Date().getTime();  
  81.   
  82.     recordTimer = setTimeout(function(){  
  83.         wx.startRecord({  
  84.             success: function(){  
  85.                 localStorage.rainAllowRecord = 'true';  
  86.                 alert('true');  
  87.             },  
  88.             cancel: function () {  
  89.                 alert('用户拒绝授权录音');  
  90.             }  
  91.         });  
  92.     },300);  
  93.   };  
  94. var voice = {  
  95. localId: '',  
  96. serverId: ''  
  97. };  
  98.   // 4.3 停止录音  
  99.   document.querySelector('#stopRecord').onclick = function () {  
  100.    END = new Date().getTime();  
  101.       
  102.     if((END - START) < 300){  
  103.         END = 0;  
  104.         START = 0;  
  105.         //小于300ms,不录音  
  106.         clearTimeout(recordTimer);  
  107.     }else{  
  108.         wx.stopRecord({  
  109.           success: function (res) {    
  110.           voice.localId = res.localId;  
  111.           //uploadVoice();    
  112.           },  
  113.           fail: function (res) {  
  114.             alert(JSON.stringify(res));  
  115.           }  
  116.         });  
  117.     }  
  118.   };  
  119.     
  120.   // 4.4 监听录音自动停止  
  121.   wx.onVoiceRecordEnd({  
  122.     complete: function (res) {  
  123.       voice.localId = res.localId;  
  124.       alert('录音时间已超过一分钟');  
  125.     }  
  126.   });  
  127.   
  128.   // 4.5 播放音频  
  129.   document.querySelector('#playVoice').onclick = function () {  
  130.     if (voice.localId == '') {  
  131.       alert('请先使用 startRecord 接口录制一段声音');  
  132.       return;  
  133.     }  
  134.     wx.playVoice({  
  135.       localId: voice.localId  
  136.     });  
  137.   };  
  138.   
  139.   // 4.6 暂停播放音频  
  140.   document.querySelector('#pauseVoice').onclick = function () {  
  141.     wx.pauseVoice({  
  142.       localId: voice.localId  
  143.     });  
  144.   };  
  145.   
  146.   // 4.7 停止播放音频  
  147.   document.querySelector('#stopVoice').onclick = function () {  
  148.     wx.stopVoice({  
  149.       localId: voice.localId  
  150.     });  
  151.   };  
  152.   
  153.   // 4.8 监听录音播放停止  
  154.   wx.onVoicePlayEnd({  
  155.     complete: function (res) {  
  156.       alert('录音(' + res.localId + ')播放结束');  
  157.     }  
  158.   });  
  159.   
  160.   // 4.8 上传语音  
  161.   document.querySelector('#uploadVoice').onclick = function () {  
  162.     if (voice.localId == '') {  
  163.       alert('请先使用 startRecord 接口录制一段声音');  
  164.       return;  
  165.     }  
  166.    wx.uploadVoice({  
  167.     localId: voice.localId, // 需要上传的音频的本地ID,由stopRecord接口获得  
  168.     isShowProgressTips: 1, // 默认为1,显示进度提示  
  169.         success: function (res) {  
  170.         var serverId = res.serverId; // 返回音频的服务器端ID  
  171.         alert(serverId);  
  172.          $.ajax({  
  173.                 url: '/index.php/Ch/Cms/Uploadwxvoice/upload',//通过ajax请求后台进行语音资源向本地服务器下载的操作  
  174.                 type: 'POST',  
  175.                data : { serverId : serverId },  
  176.                 dataType: "html",  
  177.                 success: function (data) {  
  178.                     alert('OK');  
  179.                     console.log(data);  
  180.                 },  
  181.                 error: function (xhr, errorType, error) {  
  182.                     console.log(error);  
  183.                 }  
  184.             });  
  185.     }  
  186.     });  
  187.   };  
  188.   
  189.   // 4.9 下载语音  
  190.   document.querySelector('#downloadVoice').onclick = function () {  
  191.     if (voice.serverId == '') {  
  192.       alert('请先使用 uploadVoice 上传声音');  
  193.       return;  
  194.     }  
  195.     wx.downloadVoice({  
  196.       serverId: voice.serverId,  
  197.       success: function (res) {  
  198.         alert('下载语音成功,localId 为' + res.localId);  
  199.         voice.localId = res.localId;  
  200.       }  
  201.     });  
  202.   };  
  203.     });  
  204. wx.error(function (res) {  
  205.   alert(res.errMsg);  
  206. });  
  207. </script>  

七.第六步中的 Uploadwxvoice()   方法代码如下:

[php] view plain copy
  1. //上传操作,将微信服务器上的文件下载到本地服务器  
  2.     public function upload(){  
  3.         $model = M('wxly');  
  4.         //media_id(serverId)为微信jssdk接口上传后返回的媒体id  
  5.         $media_id = $_POST['serverId'];  
  6.           
  7.         $token_data = json_decode(file_get_contents("./luyin/access_token.json"));  
  8.         $access_token = $token_data->access_token;  
  9.   
  10.         $path = "./Wxupload/";   //保存路径,相对当前文件的路径  
  11.          if(!is_dir($path)){  
  12.             mkdir($path);  
  13.         }  
  14.               
  15.         //微 信上传下载媒体文件  
  16.         $url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$media_id}";  
  17.           
  18.           
  19.         $filename = $media_id.".amr";//下载下来的文件名字,前缀可自定义,在此步骤后可将下载的资源上传七牛云进行转码为 .MP3 再次下载操作,功能不需要可忽略  
  20.               
  21.         $filepath = $path.$filename;  
  22.       
  23.           
  24.         ob_start();  
  25.         readfile($url);  
  26.         $img  = ob_get_contents();  
  27.         ob_end_clean();  
  28.         $size = strlen($img);  
  29.         $fp = fopen($path."/".$filename'a');  
  30.         fwrite($fp$img);  
  31.         fclose($fp);  
  32.               
  33.            
  34.           
  35.         $data['name'] = $name;  
  36.         $data['phone'] = $phone;  
  37.         $data['source'] = $biaoti;  
  38.         $data['attachment'] = $filename;  
  39.         $data['zattachment'] = $zfilename;  
  40.         $data['openid'] = $_SESSION['openid'];  
  41.         $data['nickname'] = $_SESSION['nickname'];  
  42.         $data['headimgurl'] = $_SESSION['headimgurl'];  
  43.         $data['status'] = 0;  
  44.         $data['writetime'] = time();  
  45.   
  46.   
  47.         // 保存当前数据对象  
  48.         if ($result = $model->add($data)) { //保存成功  
  49.             echo 'uploadok';  
  50.         } else {  
  51.             echo 'uploaderror';  
  52.         }   
  53.         //echo json_encode($arr);  
  54.     }  
阅读全文
0 0
原创粉丝点击