微信開發分享朋友&朋友圈以及錄音功能

微信開發-關於分享朋友&朋友圈以及錄音功能
兩天剛整理了一個關於微信開發錄音功能的開發步驟,網上這方面資料已經很多了,寫下來就當作自己的筆記。

一. 首先需要在微信公衆號中進行配置(其中Token爲自定義項)
在這裏插入圖片描述
二. 在配置的域名文件夾下放置checkwei.php文件,用來驗證配置是否成功。如下:

<?php
header('Content-type:text');
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
    $wechatObj->valid();
}else{
    $wechatObj->responseMsg();
}
 
class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            header('content-type:text');
            echo $echoStr;
            exit;
        }
    }
 
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
 
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
 
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}

三.配置js接口安全域名,配置後公衆號開發者可在該域名下調用微信開放的JS接口
在這裏插入圖片描述
按照提示進行第三部操作:
在這裏插入圖片描述
四.準備jssdk文件,現已經整理出一個分享的js_sdk包,所以前端同事在做的項目中直接引入這個封裝好的包就行,jssdk包無需做任何修改!

(1)前端同事寫的頁面後綴多爲.html或.shtml文件,需將頁面的後綴改爲.php ,因爲在頁面中需要嵌入PHP的代碼,若是.html,.shtml後綴則無法解析。(該方法比較笨,因爲我做的時候用的就是簡單的一個頁面所以就這樣做了)

(2)引入一小段php文件,必須在文件開頭引入,因爲php規定require一個文件前面不能有任何輸出。代碼實例如下:

<?php
require_once "jssdk.php";
$jssdk=new JSSDK
 ("wx****************a","86****************************67");
$signPackage =$jssdk->GetSignPackage();
?>

五.這次主要做的是一個關於微信錄音,將錄音資源從微信服務器下載到本地服務器的一個過程。不過先將獲取用戶信息這個步驟代碼貼出來:
1.

	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.//通過授權獲取用戶的信息
public function index(){
$appid = “wx*********291”;
$secret = “eb************************23eb2”;
$code = $_GET[“code”];

		//使用code換取oauth2的授權access_token
		$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'));
		$access_token = $token_obj->access_token;
		$openid = $token_obj->openid;
		
		//使用授權Access Token和openid獲取用戶信息`
		$user_obj = json_decode(file_get_contents('https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN'));
		
		//將相關信息存儲進session
		$_SESSION['openid'] = $user_obj->openid;
		$_SESSION['nickname'] = $user_obj->nickname;
		$_SESSION['headimgurl'] = $user_obj->headimgurl;
	
		$this->display();
		
}

六.接下來可以進行調用接口開發。首先配置config項,註冊需要調用的接口,
注意:需要先引入微信js文件
在這裏插入圖片描述

<script>
    //微信分享
    // var share_image = "";
    // var share_link = "";
    // var share_desc = '';
    // var share_title = '部落PK聯盟';
    wx.config({
        debug: false,
        appId: '<?php echo $signPackage["appId"];?>',
        timestamp: <?php echo $signPackage["timestamp"];?>,
        nonceStr: '<?php echo $signPackage["nonceStr"];?>',
            signature: '<?php echo $signPackage["signature"];?>',
            jsApiList: [
        // 所有要調用的 API 都要加到這個列表中
        'onMenuShareAppMessage',//分享朋友
        'onMenuShareTimeline',///分享朋友圈
        'startRecord',//開始錄音
		'stopRecord',//停止錄音
		'onVoiceRecordEnd',//監聽錄音自動停止接口
		'playVoice',//播放錄音
		'pauseVoice',//暫停雲隱接口
		'stopVoice',//停止播放
		'onVoicePlayEnd',//
		'uploadVoice',//上傳語音
		'downloadVoice'//下載語音
    ]
    });
    wx.ready(function () {
	
	
		//朋友圈
		wx.onMenuShareTimeline({
			title:' ',//標題
			link:'',//鏈接
			imgUrl:'',//圖片
			success:function(){
 
			},
			cancle:function(){
 
			}
 
 
 
		});
 
		//朋友
		wx.onMenuShareAppMessage({
			title:' ',
			desc:' ',//描述
			link:'',
			imgUrl:'',
			type:'',//分享類型music  不填默認是link
			dataUrl:'',//如過類型是music  video  需要填寫鏈接  默認爲空
			success:function(){
 
			},
			cancle:function(){
 
			}
 
 
 
		});
	if(!localStorage.rainAllowRecord || localStorage.rainAllowRecord !== 'true'){
    wx.startRecord({
        success: function(){
            localStorage.rainAllowRecord = 'true';
            wx.stopRecord();
        },
        cancel: function () {
            alert('用戶拒絕授權錄音');
        }
    });
}
 
        // 4 音頻接口
  // 4.2 開始錄音
  document.querySelector('#startRecord').onclick = function () {
	 START = new Date().getTime();
 
    recordTimer = setTimeout(function(){
        wx.startRecord({
            success: function(){
                localStorage.rainAllowRecord = 'true';
				alert('true');
            },
            cancel: function () {
                alert('用戶拒絕授權錄音');
            }
        });
    },300);
  };
var voice = {
localId: '',
serverId: ''
};
  // 4.3 停止錄音
  document.querySelector('#stopRecord').onclick = function () {
   END = new Date().getTime();
    
    if((END - START) < 300){
        END = 0;
        START = 0;
        //小於300ms,不錄音
        clearTimeout(recordTimer);
    }else{
        wx.stopRecord({
          success: function (res) {  
          voice.localId = res.localId;
          //uploadVoice();	
          },
          fail: function (res) {
            alert(JSON.stringify(res));
          }
        });
    }
  };
  
  // 4.4 監聽錄音自動停止
  wx.onVoiceRecordEnd({
    complete: function (res) {
      voice.localId = res.localId;
      alert('錄音時間已超過一分鐘');
    }
  });
  // 4.5 播放音頻
  document.querySelector('#playVoice').onclick = function () {
    if (voice.localId == '') {
      alert('請先使用 startRecord 接口錄製一段聲音');
      return;
    }
    wx.playVoice({
      localId: voice.localId
    });
  };
  // 4.6 暫停播放音頻
  document.querySelector('#pauseVoice').onclick = function () {
    wx.pauseVoice({
      localId: voice.localId
    });
  };
  // 4.7 停止播放音頻
  document.querySelector('#stopVoice').onclick = function () {
    wx.stopVoice({
      localId: voice.localId
    });
  };
  // 4.8 監聽錄音播放停止
  wx.onVoicePlayEnd({
    complete: function (res) {
      alert('錄音(' + res.localId + ')播放結束');
    }
  });
  // 4.8 上傳語音
  document.querySelector('#uploadVoice').onclick = function () {
    if (voice.localId == '') {
      alert('請先使用 startRecord 接口錄製一段聲音');
      return;
    }
   wx.uploadVoice({
    localId: voice.localId, // 需要上傳的音頻的本地ID,由stopRecord接口獲得
    isShowProgressTips: 1, // 默認爲1,顯示進度提示
        success: function (res) {
        var serverId = res.serverId; // 返回音頻的服務器端ID
		alert(serverId);
		 $.ajax({
                url: '/index.php/Ch/Cms/Uploadwxvoice/upload',//通過ajax請求後臺進行語音資源向本地服務器下載的操作
                type: 'POST',
               data : { serverId : serverId },
                dataType: "html",
                success: function (data) {
                    alert('OK');
					console.log(data);
                },
                error: function (xhr, errorType, error) {
                    console.log(error);
                }
            });
    }
	});
  };
  // 4.9 下載語音
  document.querySelector('#downloadVoice').onclick = function () {
    if (voice.serverId == '') {
      alert('請先使用 uploadVoice 上傳聲音');
      return;
    }
    wx.downloadVoice({
      serverId: voice.serverId,
      success: function (res) {
        alert('下載語音成功,localId 爲' + res.localId);
        voice.localId = res.localId;
      }
    });
  };
    });
wx.error(function (res) {
  alert(res.errMsg);
});
</script>

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

//上傳操作,將微信服務器上的文件下載到本地服務器
    public function upload(){
		$model = M('wxly');
		//media_id(serverId)爲微信jssdk接口上傳後返回的媒體id
        $media_id = $_POST['serverId'];
		
		$token_data = json_decode(file_get_contents("./luyin/access_token.json"));
        $access_token = $token_data->access_token;
 
		$path = "./Wxupload/";   //保存路徑,相對當前文件的路徑
		 if(!is_dir($path)){
			mkdir($path);
		}
			
		//微 信上傳下載媒體文件
		$url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$media_id}";
		
		
		$filename = $media_id.".amr";//下載下來的文件名字,前綴可自定義,在此步驟後可將下載的資源上傳七牛雲進行轉碼爲 .MP3 再次下載操作,功能不需要可忽略
			
		$filepath = $path.$filename;
	
		
		ob_start();
		readfile($url);
		$img  = ob_get_contents();
		ob_end_clean();
		$size = strlen($img);
		$fp = fopen($path."/".$filename, 'a');
		fwrite($fp, $img);
		fclose($fp);
			
		 
		
		$data['name'] = $name;
		$data['phone'] = $phone;
		$data['source'] = $biaoti;
		$data['attachment'] = $filename;
		$data['zattachment'] = $zfilename;
		$data['openid'] = $_SESSION['openid'];
		$data['nickname'] = $_SESSION['nickname'];
		$data['headimgurl'] = $_SESSION['headimgurl'];
		$data['status'] = 0;
		$data['writetime'] = time();
 
 
		// 保存當前數據對象
		if ($result = $model->add($data)) { //保存成功
			echo 'uploadok';
		} else {
			echo 'uploaderror';
		} 
		//echo json_encode($arr);
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章