詳解微信第三方小程序開發(fā)
詳解微信第三方小程序開發(fā)
微信申請(qǐng)第三方之后可以獲取授權(quán)方的很多權(quán)限,主要的是生碼和開發(fā),生碼的第三方授權(quán)之前已經(jīng)寫了一篇文章,最近做了小程序開發(fā),總結(jié)一下寫下來供大家參考
注意事項(xiàng):如果在調(diào)試過程中返回了錯(cuò)誤碼請(qǐng)到小程序開發(fā)api頁(yè)面查看,
小程序開發(fā)使用的域名是你申請(qǐng)第三方時(shí)候填寫的域名,
小程序代碼模板最多只有50個(gè),可以刪除然后重新添加。
準(zhǔn)備工作:
申請(qǐng)微信第三方并且權(quán)限那邊要選上開發(fā),第三方申請(qǐng)成功之后就是準(zhǔn)備小程序了,需要兩個(gè)小程序,一個(gè)作為小程序代碼庫(kù),一個(gè)作為用戶測(cè)試用,需要在第三方授權(quán)。
添加小程序代碼庫(kù): 在第三方那邊將小程序添加為開發(fā)小程序,然后該小程序就成為了第三方的開發(fā)小程序,之后該小程序提交的代碼都會(huì)存入第三方,你可以選擇版本添加為模板,一個(gè)第三方最 多只能有50個(gè)模板。
開發(fā)流程:
post請(qǐng)求公共方法,與微信服務(wù)器交互用
代碼如下
protected function curl_post( $curlHttp, $postdata ) {
$ch = curl_init(); //用curl發(fā)送數(shù)據(jù)給api
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_URL, $curlHttp );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $postdata );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
$response = curl_exec( $ch );
curl_close( $ch );
$result = json_decode( $response, true );
return $result;
}get請(qǐng)求公共方法,與微信服務(wù)器交互用
代碼如下
protected function buildRequestForm( array $param, $method, $target='',$jump=false) {
$sHtml = "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><form id='autoSubmit' action='".$target."' method='".$method."'>";
if ( !empty( $param ) ) {
foreach( $param as $key => $value ) {
$sHtml.= "<input type='hidden' name='".$key."' value='".urldecode($value)."'/>";
}
}
$sHtml .= "</form>";
if($jump) $sHtml = $sHtml."<script>document.getElementById(\"autoSubmit\").submit();</script>";
return $sHtml;
}獲取授權(quán)方api調(diào)用拼成access_token公共方法
代碼如下
protectd function getAccessToken( $appId ) {
$accessToken = '';
if ( empty( $appId ) ) {
return $accessToken;
}
// 中間的邏輯自己填充
return $accessToken;
}首先是開發(fā)一套小程序并且上傳,之后再第三方里邊把該版本設(shè)置成模板,這個(gè)時(shí)候你就用了模板id(用于代碼指定用)
通過調(diào)用微信接口,給用戶小程序指定小程序代碼
代碼如下
public function commitCode() {
$appId = input( 'app_id', '' );
$descript = input( 'descript', '測(cè)試代碼指定' );
$version = input( 'version', 'V.1.0' );
$templateId = input( 'template_id', 1 );
if ( empty( $appId ) ) {
$this->error( appid不能為空 );
return;
}
if ( empty( $templateId ) && ( $templateId != 0 ) ) {
$this->error( '模板id不能為空' );
return;
}
$accessToken = $this->getAccessToken( $appId );
// 個(gè)人信息我給清除了,空字符部分請(qǐng)自己補(bǔ)充
$extJson = array(
'extAppid' => $appId,
'ext' => array(
'attr1' => 'value1'
),
'extPages' => array(
'pages/index/index' => array(
'navigationBarTitleText' => ''
),
'pages/media/media' => array(
'navigationBarTitleText' => ''
)
),
'pages' => array(
'pages/index/index',
'pages/media/media'
),
'window' => array(
'backgroundColor' => '#f8f8f8',
'navigationBarTextStyle' => 'white',
"navigationBarTitleText" => "",
'navigationBarBackgroundColor' => '#2b3b48'
),
'tabBar' => array(
'list' => array(
array(
'text' => '',
'pagePath' => 'pages/index/index',
),
array(
'text' => '',
'pagePath' => 'pages/media/media',
)
)
),
'networkTimeout' => array(
'request' => 10000,
'uploadFile' => 10000,
'downloadFile' => 10000,
'connectSocket' => 10000
)
);
$params = array(
'template_id' => $templateId,
'user_version' => $version,
'user_desc' => $descript,
'ext_json' => json_encode( $extJson, JSON_UNESCAPED_UNICODE )
);
$result = $this->curl_post( 'https://api.weixin.qq.com/wxa/commit?access_token='.$accessToken, json_encode( $params, JSON_UNESCAPED_UNICODE ) );
if ( empty( $result ) || !empty( $result['errcode'] ) ) {
$this->error( '代碼指定錯(cuò)誤' );
return;
}
$this->success( '操作成功' );
return;
}指定代碼之后就是查看功能是否正常了,所以就要調(diào)用微信接口獲取體驗(yàn)二維碼掃碼體驗(yàn),
代碼如下
public function getExpCode() {
$appId = input( 'app_id', '' );
if ( empty( $appId ) ) {
$this->error( appid不能為空 );
return;
}
$accessToken = $this->getAccessToken( $appId );
if ( empty( $accessToken ) ) {
$this->error( '獲取授權(quán)accessToken錯(cuò)誤' );
return;
}
$params = array(
'access_token' => $accessToken
);
$result = $this->buildRequestForm( $params, 'GET', 'https://api.weixin.qq.com/wxa/get_qrcode?access_token='.$accessToken, true );
echo $result;
exit;
}如果授權(quán)用戶沒有體驗(yàn)權(quán)限則掃碼之后不能進(jìn)行小程序功能體驗(yàn),這個(gè)時(shí)候就需要你通過微信接口將用戶設(shè)置為體驗(yàn)者了,這一步可以在小程序平臺(tái)用戶管理里邊操作,你可可以通過接口進(jìn)行體驗(yàn)者的添加和刪除,添加的時(shí)候需要被添加者微信確認(rèn)
代碼如下
public function bindTester() {
$appId = input( 'app_id', '' );
$wxNumber = input( 'wx_number', '' );
if ( empty( $appId ) ) {
$this->error( appid不能為空 );
return;
}
if ( empty( $wxNumber ) ) {
$this->error( 微信號(hào)不能為空 );
return;
}
$accessToken = $this->getAccessToken( $appId );
if ( empty( $accessToken ) ) {
$this->error( '獲取授權(quán)accessToken錯(cuò)誤' );
return;
}
$params = array(
'wechatid' => $wxNumber
);
$result = $this->curl_post( 'https://api.weixin.qq.com/wxa/bind_tester?access_token='.$accessToken, json_encode( $params ) );
print_r($result);
exit;
return;
}
public function unBindTester() {
$appId = input( 'app_id', '' );
$wxNumber = input( 'wx_number', '' );
if ( empty( $appId ) ) {
$this->error( appid不能為空 );
return;
}
if ( empty( $wxNumber ) ) {
$this->error( 微信號(hào)不能為空 );
return;
}
$accessToken = $this->getAccessToken( $appId );
if ( empty( $accessToken ) ) {
$this->error( '獲取授權(quán)accessToken錯(cuò)誤' );
return;
}
$params = array(
'wechatid' => $wxNumber
);
$result = $this->curl_post( 'https://api.weixin.qq.com/wxa/unbind_tester?access_token='.$accessToken, json_encode( $params ) );
print_r($result);
exit;
return;
}如果體驗(yàn)功能有問題則重新調(diào)整小程序代碼邏輯然后上傳之后設(shè)置為模板,如果沒有問題則將小程序代碼提交審核,但是提交審核的時(shí)候需要指定category,所以需要調(diào)用微信接口查看
如果授權(quán)用戶沒有設(shè)置的話,需要對(duì)方進(jìn)入小程序平臺(tái),在填寫小程序信息的地方添加服務(wù)條目
代碼如下
public function getCategory() {
$appId = input( 'app_id', '' );
if ( empty( $appId ) ) {
$this->error( appid不能為空 );
return;
}
$accessToken = $this->getAccessToken( $appId );
if ( empty( $accessToken ) ) {
$this->error( '獲取授權(quán)accessToken錯(cuò)誤' );
return;
}
$params = array(
'access_token' => $accessToken
);
$result = $this->buildRequestForm( $params, 'GET', 'https://api.weixin.qq.com/wxa/get_category?access_token='.$accessToken, true );
echo $result;
exit;
}拿到服務(wù)條目之后就是提交代碼審核了
代碼如下
public function submitAudit() {
$appId = input( 'app_id', '' );
if ( empty( $appId ) ) {
$this->error( appid不能為空 );
return;
}
$accessToken = $this->getAccessToken( $appId );
if ( empty( $accessToken ) ) {
$this->error( '獲取授權(quán)accessToken錯(cuò)誤' );
return;
}
$params = array(
'item_list' => array(
array(
'address' => 'pages/index/index',
'tag' => 'IT科技',
'first_class' => 'IT科技',
'second_class' => '硬件與設(shè)備',
'title' => '生成二維碼'
),
array(
'address' => 'pages/media/media',
'tag' => '工具',
'first_class' => '工具',
'second_class' => '辦公',
'title' => '多媒體上傳'
)
)
);
$result = $this->curl_post( 'https://api.weixin.qq.com/wxa/submit_audit?access_token='.$accessToken, json_encode( $params, JSON_UNESCAPED_UNICODE ) );
echo'<pre>';
print_r($result);
exit;
$this->success( '操作成功' );
return;
}提交審核之后,微信服務(wù)器會(huì)返回一個(gè)審核id,你可以通過該審核id查詢審核狀態(tài)
當(dāng)審核通過之后,微信會(huì)給你第三方注冊(cè)的回調(diào)地址推送一個(gè)審核結(jié)果
代碼如下
public function getAuditStatus (){
$appId = input( 'app_id', '' );
if ( empty( $appId ) ) {
$this->error( appid不能為空 );
return;
}
$accessToken = $this->getAccessToken( $appId );
if ( empty( $accessToken ) ) {
$this->error( '獲取授權(quán)accessToken錯(cuò)誤' );
return;
}
$params = array(
'auditid' => 12334
);
$result = $this->curl_post( 'https://api.weixin.qq.com/wxa/get_auditstatus?access_token='.$accessToken, json_encode( $params ) );
print_r($result);
exit;
return;
}當(dāng)小程序?qū)徍送ㄟ^了接下來就是小程序發(fā)布了
代碼如下
public function release (){
$appId = input( 'app_id', '' );
if ( empty( $appId ) ) {
$this->error( appid不能為空 );
return;
}
$accessToken = $this->getAccessToken( $appId );
if ( empty( $accessToken ) ) {
$this->error( '獲取授權(quán)accessToken錯(cuò)誤' );
return;
}
$result = $this->curl_post( 'https://api.weixin.qq.com/wxa/release?access_token='.$accessToken, '{}' );
print_r($result);
exit;
return;
}就這樣,小程序開發(fā)就完成了,邏輯很簡(jiǎn)單,代碼也沒難度,本文章的代碼僅供大家參考,如果有問題請(qǐng)?jiān)u論指出,我盡量補(bǔ)充。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Astro Islands靜態(tài)頁(yè)面交互式UI組件
這篇文章主要為大家介紹了Astro Islands靜態(tài)頁(yè)面交互式UI組件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
微信小程序 彈框和模態(tài)框?qū)崿F(xiàn)代碼
這篇文章主要介紹了微信小程序 彈框和模態(tài)框?qū)崿F(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
微信小程序 利用css實(shí)現(xiàn)遮罩效果實(shí)例詳解
這篇文章主要介紹了微信小程序 利用css實(shí)現(xiàn)遮罩效果實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01
JavaScript設(shè)計(jì)模式之命令模式和狀態(tài)模式詳解
這篇文章主要為大家介紹了JavaScript設(shè)計(jì)模式之命令模式和狀態(tài)模式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
微信小程序 開發(fā)之快遞查詢功能的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序 開發(fā)之快遞查詢功能的實(shí)現(xiàn)的相關(guān)資料,這里實(shí)現(xiàn)微信小程序查詢快遞的功能,需要的朋友可以參考下2017-01-01
js基礎(chǔ)語(yǔ)法與maven項(xiàng)目配置教程案例
本篇文章介紹了幾個(gè)javascript的基本語(yǔ)法和maven的配置教程。想學(xué)習(xí)javascript和maven的朋友們可以參考一下,希望能給你帶來幫助2021-07-07

