このチュートリアルの注意点:
- サードパーティ企業による H5マイクロアプリケーションの 開発、非エンタープライズ内部開発、非推奨の「小規模プログラム」に適用可能。
- メッセージプッシュモードは HTTPコールバック であり、ネイル料金の「RDSネイルクラウドプッシュデータソース」モードを使用しません。
開発前の準備:
- サーバーについては、パブリックネットワークサーバーを用意することをお勧めします。そうでない場合は、イントラネット侵入ツールが必要です。
- デバッグする場合、H5マイクロアプリケーションのデバッグは「実際のマシン」のデバッグにしかできないため、非常に不快なので、デバッグ時にはイントラネット侵入ツールを使用することを強くお勧めします 。
- ドメイン名については、運命に従ってください。
理解しておくべきその他の事項:
- ネイル会社を準備する必要があります(ネイル会社がない場合は作成できます)。テストアプリケーションは、認定されているかどうかは関係ありません。公開する際の関連する制限については、ドキュメントを参照してください。
- 現在の企業のcorpIdを取得するH5マイクロアプリケーションのフロントエンドWebページは、ホームページのURLで$ CORPID $ プレースホルダーを使用し、 次にページのurlパラメーターを解析してcorpIdを取得する必要があり ます。
- ホームページアドレスは、ホームページアドレスの後に変更できます。いつ作成してもかまいません。コールバックアドレスは、独自のサーバーを構築する必要があり、入力時に有効性を確認する必要があります 。cn.lnexin.dingtalk.controller.SuiteCallbackController :: callback(引数...)
-
独自のサーバーコールバックインターフェイスを構築する前に、コールバックアドレスを入力することはできません。
-
コールバックアドレスを構成する前は、エンタープライズ認証を実行できません。
- コールバックで現在のエンタープライズをアクティブ化すると、承認は成功したと見なされます。
-
許可を受ける前に、携帯電話側とPC側は実際のアプリケーションで私たちのアプリケーションを見ることができません。
さらに、このチュートリアルでは、ネイルマイクロアプリケーションの無料登録プロセスの説明に重点を置いているため、フロントエンド部分では、参照のためにネイティブで最も単純なjsを使用します。
ディレクトリ
1. H5マイクロアプリケーションを作成する
次に、マイクロアプリケーションサーバーを構築します(サービスポイントgitサンプルコードアドレス:https : //gitee.com/lne/ding-server )
3.サーバープログラムが正常に実行されることを確認し、コールバックアドレスを入力します。
4番目に、承認>アクティベーションプロセスを実装し、エンタープライズクライアントのアプリケーションリストにマイクロアプリケーションを追加します。
5番目に、テスト用の簡単なマイクロアプリケーションのホームページ(htmlページ)を記述します。
6. AndroidセグメントとPCセグメントからアクセスし、ログインプロセスに問題がないことを確認します。
1. H5マイクロアプリケーションを作成する
作成後:
このプログラムはクライアントとPC側では表示されません。このプログラムを表示するには、認証>アクティベーションプロセスが必要です。また、認証>アクティベーションはサーバーに依存しています。
Dingdingがメッセージを送信できるように、有効なコールバックアドレスが追加されます。
また、サーバーのコールバックアドレスプログラムで正しいビジネスを処理することにより、正しいプロセスを完了することができます。承認が完了した後にのみ、>エンタープライズアプリケーションをアクティブ化すると、クライアントでマイクロアプリケーションを確認できます。
有効なコールバックアドレスがない場合は、独自のサーバーでauthorization>アクティベーションプロセスを処理しないでください。クライアントでこのプログラムが表示されることはありません。
ステップ1:基本情報を入力します
手順2.開発情報を構成する構成後、[アプリケーションの作成]をクリックします。
構成が完了すると、情報は次のようになります。
開発者のバックグラウンドで追加した後は、おそらく次のようになります。その他の情報:コールバックURL(サーバーの完了後に入力)、ホームページアドレスなど。後で変更できます。
2.マイクロアプリケーションサーバーを構築する
サーバープログラムを参照してください(server-example)
1.構成パラメータは、上記情報の図基礎を参照して適用することができる1対1の対応に移行する。 2.すべての鍵情報をサーバに格納され、そのような私たちのsuiteKey / suiteSecret / suiteTicket / AESKey /トークンとして; 3.したがって爪とログインのない認証コードの取得を除いて、関連するデータのやり取りはサーバー側とバックグラウンドで行われます 。4。フロントエンドとサーバー間のやり取り中に、corpIdがフロントエンドによって取得されて渡されます 。5。サーバーとネイルネイルインタラクションで使用されるaccessTokenは、毎回ネイルおよび取得できますが、有効期間中に一度取得してフロントエンドに保存することをお勧めします。各データインタラクションはトークンをバックエンドに転送します 。6。ネイルアプリケーションのコールバックアドレスであるサーバーにリクエストを送信します 。7。ネイルのすべてのメッセージはコールバックを通じて通知され、メッセージの構造は一貫しています。
ここにいくつかのキーコードがあります:(完全なプロジェクトコードについては、上記のアドレス例を参照してください)
1.スパイクリクエストの受信
パッケージcn.lnexin.dingtalk.controller;
cn.lnexin.dingtalk.service.IDingAuthService;をインポートします。
cn.lnexin.dingtalk.service.ISuiteCallbackService;をインポートします。
cn.lnexin.dingtalk.utils.JsonTool;をインポートします。
cn.lnexin.dingtalk.utils.Stringsをインポートします。
import com.fasterxml.jackson.databind.JsonNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation。*;
import java.util.LinkedHashMap;
import java.util.Map;
静的なcn.lnexin.dingtalk.constant.CallbackConstant。*をインポートします。
/ **
* [ Ning Ding] -Ding Ding コールバックインターフェイス。アクティベーション、承認、アクティベーション、非アクティベーション、注文の発行などを含みます。
*
* @author [email protected]
** /
public class SuiteCallbackController { static Logger logger = LoggerFactory.getLogger(SuiteCallbackController.class); / ** * Dingding から送信されたデータ形式: * <p> * http://サーバーによってデプロイされたIP:ポート/コールバック?署名= 111108bb8e6dbce3c9671d6fdb69d15066227608&タイムスタンプ= 1783610513&ナンス= 380 320の111 JSONデータとして含ま*: * { * "暗号化": "1ojQf0NSvw2WPvW7LijxS8UvISr8pdDP + rXpPbcLGOmIBNbWetRg7IP0vdhVgkVwSoZBJeQwY2zhROsJq / HJ + q6tp1qhl9L1 + ccC9ZjKs1wV5bmA9NoAWQiZ + 7MpzQVq + j74rJQljdVyBdI / dGOvsnBSCxCVW0ISWX0vn9lYTuuHSoaxwCGylH9xRhYHL9bRDskBc7bO0FseHQQasdfghjkl" *} * / @Autowired ISuiteCallbackService suiteCallbackService。 / ** * Dingdingサーバーから送信されたプッシュメッセージのアドレス * * @param signature * @param timestamp * @param nonce * @param encryptNode * @return * / @PostMapping(value = "/ callback") public Map <String、String> tempAuthCodeCallback(@RequestParam String signature、 @RequestParam String timestamp、 @RequestParam String nonce、 @RequestBody JsonNode encryptNode){ String encryptMsg = encryptNode.get( "encrypt")。textValue(); String plainText = suiteCallbackService.decryptText(signature、timestamp、nonce、encryptMsg); JsonNode plainNode = JsonTool.getNode(plainText); //コールバックイベントブランチに入り、 Map <String、String> を選択しますresultMap = caseProcess(plainNode); return resultMap; } / ** *コールバックデータタイプに応じて異なるビジネス処理を実行 * * @ param plainNode * @return * / private Map <String、String> caseProcess(JsonNode plainNode){ Map <String、String> resultMap = new LinkedHashMap <>(); String eventType = plainNode.get( "EventType")。textValue() ; スイッチ(eventType){ ケースSUITE_TICKET_CALLBACK_URL_VALIDATE: logger.info( "[callback] verify the valid性質of the callback address:{}"、plainNode); resultMap = suiteCallbackService.encryptText(CALLBACK_RETURN_SUCCESS); logger.info( "[callback] in developerバックグラウンドでコールバックアドレスを変更します: "+ plainNode); break; ケースTEMP_AUTH_CODE_ACTIVE: logger.info( "[callback] Enterprise activation authorization:{}"、plainNode); Boolean active = suiteActive(plainNode); resultMap = suiteCallbackService.encryptText(active?CALLBACK_RETURN_SUCCESS:ACTIVE_RETURN_FAILURE); break; case SUITE_RELIEVE: logger.info( "[callback] Enterprise deauthorization:{}"、plainNode); // 許可解除ロジックを処理しますbreak; case CHECK_UPDATE_SUITE_URL: break; case CHECK_CREATE_SUITE_URL: resultMap = suiteCallbackService.encryptText(CALLBACK_RETURN_SUCCESS); logger.info( "[callback]コールバックURLへのポストコード復号化が成功したかどうかを確認する:" + plainNode); resultMap = suiteCallbackService.encryptText(CALLBACK_RETURN_SUCCESS); break; case CONTACT_CHANGE_AUTH: logger .info( "[callback]アドレス帳承認スコープ変更イベント:" + plainNode); break; ケースORG_MICRO_APP_STOP: logger.info( "[callback] disable application:" + plainNode); break; ケースORG_MICRO_APP_RESTORE: logger.info( "[callback] enable application:" + plainNode); break; ケースMARKET_BUY: logger.info( "[callback] user order Purchase event:" + plainNode); //アプリケーションの購入を注文する他の会社の特定のロジックに対処する break; デフォルト: logger.info( "[callback] unknown event:{}、content:{}"、eventType、plainNode); resultMap = suiteCallbackService.encryptText( "event type is not defined、contact the application provider!" + eventType ); break; } return resultMap; } / ** *アプリケーション認証をアクティブ化 * tmp_auth_code * / private Boolean suiteActive(JsonNode activeNode){ Boolean isActive = false; String corpId = activeNode.get(" AuthCorpId ")。textValue( ); 文字列tempAuthCode = activeNode.get( "AuthCode")。TextValue(); 文字列suiteToken = suiteCallbackService.getSuiteToken(); 文字列permanentCode = suiteCallbackService.getPermanentCode(suiteToken、tempAuthCode); if(!Strings.isNullOrEmpty(permanentCode)){ isActive = suiteCallbackService.activateSuite(suiteToken、corpId、persistentCode); } else { logger.error( "获取永久授权码出错"); } return isActive; }
ツールの実装:
公開プログラムを作成し、独自のサーバーに公開します。イントラネット侵入ツールを使用している場合は、無視してください。
3.サーバープログラムが正常に実行されることを確認し、コールバックアドレスを入力します。
上記の指示に従って、サーバーを独自のパブリックネットワークサーバーに配置するか、関連するイントラネット侵入ツールを使用する(自分で解決する)
つまり、サーバー側のプロジェクトにアクセス できるパブリックアドレス が必要です。
パブリックネットワークアドレスを使用して独自のサーバーにアクセスでき、データが正常に返されることを確認してください。
また確認してください:
- Dingdingから送信されたメッセージを受信するためのコールバックアドレスの言い訳が必要です(この記事のアドレスの例: / ding / callback)。
- ユーザー情報を返すために、ログイン不要の認証コードとエンタープライズcorpIdを受け取るインターフェイスが必要です (この記事のアドレスの例: / ding / login)
たとえば、私自身のテスト例は次のとおりです。
//ここは私たち自身の测试地址http://你的公网地址/ ding / config { "suiteId": "6707015"、 "suiteKey": "suiteqflsxxxxxxxx"、 "suiteSecret": "E7TH7H3hGtmhtoGDgq8adJhn0xxxxxxxxxxxBf-GQSTWl8NTs6_ " suiteToken ":" customtoken "、 " encodingAESKey ":" qwp51j1k8eiudktvnip2dwrkqxxxxxcci "、 " suiteTicket ":" customTestTicket "、 " url_suite_token ":" https://oapi.dingtalk.com/service/get_suite_token "、 " url_permanent_code " //oapi.dingtalk.com/service/get_permanent_code "、 " url_activate_suite ":" https://oapi.dingtalk。com / service / activate_suite "、 " url_get_auth_info ":" https://oapi.dingtalk.com/service/get_auth_info "、 "url_get_access_token": "https://oapi.dingtalk.com/service/get_corp_token"、 "url_get_user_id": "https://oapi.dingtalk.com/user/getuserinfo"、 "url_get_user_item": "https:// oapi .dingtalk.com / user / get " }
4.承認>アクティベーションプロセスを実装し、エンタープライズアプリケーションのアプリケーションリストにマイクロアプリケーションを追加します
さて、上記のステップの後、私たちが準備したものは次のとおりです。
- パブリックネットワークでアクセスできるサーバーのアドレス。次のような釘(コールバックアドレス)によって送信されたメッセージを受信します 。http://ding.lnexin.cn/server/ding/callback、次のような独自のログインアドレス: http:/ /ding.lnexin.cn/server/ding/login
- Dingding開発者プラットフォームで構成済みのH5マイクロアプリケーションを作成します。
- サーバーパラメータがマイクロアプリケーションの基本情報と一致していることを確認してください。
上記の手順を完了しても、クライアントには次のようなアプリケーションエントリはありません。
以下は、開発者プラットフォームで承認される必要があります
[承認]をクリックすると、Dingdingからサーバーに送信されたメッセージを受信します。一連の処理の後、サーバーはDingdingにエンタープライズをアクティブ化する要求を送信します。アクティブ化が成功すると、認証は成功します。
認証を クリックした後にサーバーが受信したメッセージ:
次のように、アクティブ化が成功した場合:
この時点で、認証のアクティブ化は成功し、関連するマイクロアプリケーションエントリがクライアントで利用可能です。など:
この時点で、すべての準備作業が完了しています。以下は、主にjsapiドッキングのログとページを無料で作成できます。
5.テスト用の簡単なマイクロアプリケーションホームページ(htmlページ)を書く
前の手順の後、マイクロアプリケーションが表示され、アクセス可能なパブリックネットワークサーバーインターフェイスアドレスを取得できます。
次に、フロントエンドのパブリックネットワークアドレスを準備する必要があります。springbootを使用している場合は、無視できます。(私はここで分かれています、誰もが自分の状況に応じて決定する必要があります。アドレスの例は次のようになります:http : //ding.lnexin.cn/)
以下に、最も単純なフロントエンドHTMLページを記述します。
htmlフロントエンドのサンプルコードは次のとおりです:(git repository)
6. Android側とPCセクションからアクセスし、プロセスに問題がないことを確認します。
サードパーティ企業によって開発されたほとんどすべての無料の登録および承認プロセスが完了しており、残りは各アプリケーションのビジネスロジックの処理です。この個人がそれを自分で解決します。