釘釘小程序 開發(fā) PHP + 釘釘小程序 (企業(yè)內(nèi)部應(yīng)用)
應(yīng)公司需求 需要結(jié)合釘釘開發(fā)小程序 由于公司自用 所以選擇了 企業(yè)內(nèi)部應(yīng)用 我在做之前和做的過程中 查不到幾乎可用的資料 我就把我遇到的 能想起來(lái)的卷仑,給要接觸的童鞋們 參考一下吧
釘釘文檔: https://ding-doc.dingtalk.com/
目前釘釘?shù)奈臋n還沒有完善的類似微信 有很多微信有的 釘釘還沒有? 希望將來(lái)可以支持吧
搞不明白的去微信看看文檔 基本能弄明白
1.緩存
微信 :
wx.setStorageSync("userid", data.data.userid)? ?
?wx.getStorageSync("userid", data.data.userid)
釘釘:(簡(jiǎn)直想死)
包括get 也不會(huì)讓你失望(有點(diǎn)難受? 這附近代碼? 我重寫優(yōu)化了好幾次 真的 )
2.loading(釘釘文檔里 在我開發(fā)時(shí)? 我找遍了 沒有叮阅,我拿著微信的代碼 判导,有l(wèi)oading 但無(wú)文字 我就試了一個(gè)content 就可以了 避避坑)
釘釘:dd.showLoading({content: '正在加載',})
微信:wx.showLoading({title: '加載中',})
3.釘釘中我沒有找到彈框 于是讓前端同事給我寫了一個(gè)
<view class="lightbox" style="{{light}}"></view><view class="xx-tbox fl fd" style="{{box}}">? <view class="nr-zi1">錄入簽名提示</view>? <view class="nr-zi2 bottom-x">是否去補(bǔ)齊簽名瓤檐?</view>? <view? onTap="cancel" class="link-1 fl right-x">取消</view>? <view? onTap="sure" data-userid="{{userids}}" class="link-2 fl">確定</view></view>
.lightbox{width:100%;z-index:101; height:100%;background-color:#333;filter:alpha(Opacity=20);-moz-opacity:0.2;opacity: 0.2; position: fixed; top:0px; left:0px;}? .xx-tbox{ width: 60%; margin: 20%; background-color: #fff; margin-top: 40%; height: 130px; z-index: 999;}? .nr-zi1{ width: 100%; font-size: 16px; text-align: center; line-height: 32px; margin-top: 15px;}? .nr-zi2{ width: 100%; font-size: 12px; text-align: center; line-height: 22px; padding-bottom: 15px;}? .link-1{ width: 49.5%; height: 46px; line-height: 46px; font-size: 14px; text-align: center; color: #333; }? .link-2{ width: 49.5%; height: 46px; line-height: 46px; font-size: 14px; text-align: center; color: #71d398; }? .right-x{border-right-width: 1px; border-right-style: solid; border-right-color: #f4f4f4; }
5.在開發(fā)調(diào)試階段 建議增加一個(gè)? ClearCache 否則 你setData 里面清除不掉? 造成其他影響? 清除緩存 文檔中有
寫過小程序js 這句就當(dāng)沒看見 js中每一個(gè)方法{}其障, (花括號(hào)后跟英文逗號(hào)) 最后一個(gè)方法不加。
ClearCache(event){?
? ? dd.removeStorage({?
? ? ? key: 'info',? ?
? ?success: function(){?
? ? ? }? ? ?
?});? ?
?},
6.釘釘小程序 每個(gè)頁(yè)要單獨(dú)保存 后編譯 但是設(shè)置中 有批量保存快捷鍵?
微信小程序 是只要ctrl + s 就保存所有 + 編譯
7.網(wǎng)絡(luò)請(qǐng)求
dd.httpRequest({? ? ? ? ? ? ? ? ?
????url: 'http://url?userid='+userid,? ? ? ? ? ? ? ? ?
????method: 'POST',? ? ? ? ? ? ? ? ?
????data: { userid: userid},? ? ? ? ? ? ? ? ?
????dataType: 'json',? ? ? ? ? ? ? ? ?
?????success: (res) => {? ? ? ? ? ? ? ? ?
? // console.log('emmm res======' + res);? ? ? ? ?
? ? },? ? ? ? ? ?
?})?
8.獲取到的數(shù)據(jù) 要this.setData({})?
data值僅在當(dāng)頁(yè)生效
9.開發(fā)工具(釘釘這個(gè)模擬器 還比較滿意 可以分離出開發(fā)工具? 有點(diǎn)類似android 開發(fā)了的感覺 總讓我有一種android studio 的感覺)
我應(yīng)該沒有暴露什么吧? emmm衙傀。梢为。抵窒。弛针。。李皇。削茁。。掉房。茧跋。。圃阳。
10.登陸釘釘賬號(hào)后 開發(fā)工具左上角要選擇自己在開發(fā)者后臺(tái)創(chuàng)建的應(yīng)用類型?
app.js 中 需要綁定企業(yè)id
App({? onLaunch(options) {?
? // 第一次打開? ?
?// options.query == {number:1}? ?
?console.info('App onLaunch');? ?
?console.info(options);?
this.globalData.corpId = options.query.corpId;?
?},?
onShow(options) {?
? // 從后臺(tái)被 scheme 重新打開? ?
// options.query == {number:1}?
?},?
?onHide() {
? ? console.log('App Hide');?
?},?
globalData: {? ?
?corpId: "",? ? hasLogin: false,
?},
});?
11.獲取token? 我用的是TP5.1
/***? 查看緩存內(nèi)是否存在token信息 并檢測(cè)是否過期
*? 如過期 則重新獲取token
* JAM
* @return type $token
*/
public function getAccessToken()? ?
{
$appkey = APP_KEY;
$appsecret = APP_SECRET;
$expire_time = Cache::get('expire_time');
$access_token = Cache::get('access_token');
//如果token緩存存在
if(!empty($access_token)){
????if($expire_time < time()){
$token = $this->get_token($appkey,$appsecret,$token_file_name);
????} else {
$token = $access_token;
????}
} else {//否則token緩存不存在
$token = $this->get_token($appkey,$appsecret,$token_file_name);
}
return $token;
}
/***? 請(qǐng)求釘釘接口獲取token
*? JAM
* @param? type $appkey
* @param? type $appsecret
* @return type $token
*/
public function get_token($appkey,$appsecret)
{
$url = "https://oapi.dingtalk.com/gettoken?appkey=".$appkey."&appsecret=".$appsecret;
$get_result = json_decode($this->http($url),true);
if($get_result['errcode'] == '0'){
? ?$new_token = (object)[];
? ?$token = $get_result['access_token'];?
? ?$new_token->expire_time = time() + 7000;
? ?$new_token->access_token = $token;
Cache::set("expire_time",time() + 7000);
Cache::set("access_token",$token);
// $this->set_php_file($token_file_name,json_encode($new_token));
} else {
$token = 'get_token_error';
}? ? ? ?
return $token;}/*** 返回用戶信息
* @return type $value 用戶信息
*/
public function getUserInfo()
{
$code = input('param.authCode');
$token = getAccessToken();
$url = 'https://oapi.dingtalk.com/user/getuserinfo?access_token=' . $token . '&code=' . $code;
$result = http_request_get($url);
$res = json_decode($result,true);
//根據(jù)userid 單獨(dú)獲取釘釘用戶個(gè)人info
$url1 = 'https://oapi.dingtalk.com/user/get?access_token=' . $token . '&userid=' . $res['userid'];$result1 = http_request_get($url1);
$res1 = json_decode($result1,true);
$info['code'] = $result?1:0;
$info['res'] = $res;
$info['res1'] = $res1;
return json_encode($info);
}
釘釘獲取小程序免登授權(quán)碼
dd.getAuthCode({?
? ? ? ? ? ? ? ? success:(res)=>{?
? ? ? ? ? ? ? ? var authCode = res.authCode? ?
? ? ? ? ? ? ? }, fail:function(err){
????????????? }? ? ? ? ? ? ? ?
? })
11.webview
我做了個(gè)類似銀行簽名的東西 單個(gè)字單個(gè)字簽字 然后拼在一起? 注意webview白名單
webview 在模擬器 無(wú)法寫字? canvas 畫不上去 手機(jī)就沒問題了 厌衔,不知道是不是需要對(duì)應(yīng)的事件js
*服務(wù)端API若是調(diào)用不成功璧帝,看服務(wù)端ip地址是不是在白名單中捍岳,本地服務(wù)器測(cè)試的話,重啟路由器后ip是會(huì)變睬隶,
不在白名單 去開發(fā)者后臺(tái)配置一下 就ok 锣夹。
*釘釘開發(fā) 會(huì)涉及到一些 功能權(quán)限? 需要就開一下 如果沒權(quán)限就是用 會(huì)提示沒有權(quán)限? 注意一下就好。
一些常見的坑 我都列出來(lái)了 也有可能有我想不起來(lái)的 或者我沒接觸到的 如果有看到的 有不懂 留言我們探討
后續(xù) 維護(hù) 如果碰到坑 在補(bǔ)充