国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ WeChat アプレット WeChatの開(kāi)発 WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について

Sep 15, 2020 pm 04:34 PM

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
#ビジネスが複數(shù)ある場(chǎng)合、公開(kāi)アカウントの場(chǎng)合/同じ機(jī)能モードのミニ プログラム。小規(guī)模なプログラム開(kāi)発であれば、WeChat パブリックのバックグラウンドで複數(shù)のコード セットをコピーし、appid 情報(bào)を変更し、ドメイン ネーム サーバーとキーやその他の面倒な情報(bào)を設(shè)定する必要がありますか?アカウントを作成し、各変更を送信しますか? 一度公開(kāi)して、手順を繰り返します。維持すべき公式アカウント/ミニプログラムの數(shù)が徐々に増加するにつれて、投資する必要があるリソースとコストも増加します。

考えたことはありますか。パブリック アカウント/ミニ プログラム コードのセットを開(kāi)発し、それをテンプレートとして使用し、バックエンドで実行されるすべての処理をバックエンド管理システムに移行するだけです。 WeChat パブリック アカウントをシステム內(nèi)で自分自身に送信します。同じビジネスで小規(guī)模なプログラムを作成するには、管理者の権限が必要なだけで、システム內(nèi)のいくつかのボタンをクリックするだけで小規(guī)模なプログラムをオンラインで公開(kāi)できます。一度に N 個(gè)のパブリック アカウント向けに開(kāi)発でき、要件を満たす標(biāo)準(zhǔn)化されたインターフェイス サービスを提供できます?;镜膜圣鹰弗庭?ニーズのニーズ。 QRコードをスキャンしてプラットフォームを認(rèn)証することで、複數(shù)の公開(kāi)アカウントによるビジネスの実裝を支援することができ、複雑なパラメータ設(shè)定を理解する必要がなく、開(kāi)発者にパスワードが提供されないため、セキュリティが確保され、學(xué)生や開(kāi)発者の操作の手を真に解放することができます。 . 彼女と話(huà)す時(shí)間がもっとあればいいですね。そうです、WeChat サードパーティ プラットフォームの開(kāi)発は、女の子をナンパする時(shí)間をさらに節(jié)約するためにここにあります。

関連する學(xué)習(xí)の推奨事項(xiàng):

WeChat パブリック アカウント開(kāi)発チュートリアル

概要

WeChat パブリック プラットフォーム -サードパーティ プラットフォーム (サードパーティ プラットフォームと呼びます) は、開(kāi)発者資格認(rèn)定に合格したすべての開(kāi)発者が利用できます。公式アカウントまたはミニプログラムの運(yùn)営者(運(yùn)営者といいます)の承認(rèn)を得た後、サードパーティのプラットフォーム開(kāi)発者は、公式アカウントまたはミニプログラムの運(yùn)営者に電話(huà)することでアカウント申請(qǐng)、ミニプログラムの作成、技術(shù)を提供することができます。 WeChat オープン プラットフォームのインターフェイス機(jī)能、開(kāi)発、業(yè)界ソリューション、イベント マーケティング、プラグイン機(jī)能などの包括的なサービス。同じアカウントの運(yùn)営者は、自社に適した複數(shù)のサードパーティを選択して、製品機(jī)能を提供したり、運(yùn)用を委託したりできます。

ビジネス特性の観點(diǎn)から、サードパーティ プラットフォームは次の図に示すとおりである必要があります。

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
具體的な點(diǎn)では、ビジネス シナリオ、サードパーティ プラットフォームには次のシナリオが含まれます:

は、電子商取引業(yè)界向けのソリューションや観光業(yè)界向けのソリューションなどの業(yè)界ソリューションを提供します。

業(yè)界: (水平方向) よりプロフェッショナルなソリューションを提供 運(yùn)用能力、ユーザーのパブリック アカウントまたはミニ プログラムの洗練された操作;

機(jī)能: (垂直方向) パブリック プラットフォーム機(jī)能の最適化 (特にグラフィックのビジュアル スタイルやレイアウトを最適化するツールなど)テキスト メッセージ、特別にカスタマイズされた CRM ユーザー管理機(jī)能、強(qiáng)力なミニ プログラム プラグインなど。

サードパーティ開(kāi)発にアクセスするための前提條件は、WeChat オープン プラットフォーム アプリケーションです。詳細(xì)な作成手順については、

developers.weixin.qq.com/doc/oplatfo…

を參照してください。

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について

#1. 検証チケット

検証チケット (component_verify_ticket) を取得します。サードパーティ プラットフォームがインストールされた後、作成され承認(rèn)されると、WeChat サーバーは 10 分ごとに、component_verify_ticket

をその「承認(rèn)されたイベント受信 URL」に POST でプッシュし、POST リクエストを受信した後、文字列 success を直接返すだけです。セキュリティ強(qiáng)化のため、ポストデータ?jī)?nèi)のxmlはサービスお申込み時(shí)に暗號(hào)化?復(fù)號(hào)化キーで暗號(hào)化されており、プッシュ受信後に復(fù)號(hào)化する必要があります。

public?void?saveTicket(HttpServletRequest?request,?HttpServletResponse?response)?throws?IOException?{
??String?msgSignature?=?request.getParameter("msg_signature");//?微信加密簽名
??String?timeStamp?=?request.getParameter("timestamp");//?時(shí)間戳????
??String?nonce?=?request.getParameter("nonce");?//?隨機(jī)數(shù)??
??BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(request.getInputStream(),"UTF-8"));
??StringBuffer?sb?=?new?StringBuffer();
??String?line?=?null;
??while?((line?=?br.readLine())?!=?null)?{
????sb?=?sb.append(line);
??}
??String?postData?=?sb.toString();
??try?{
????AuthorizedUtils.saveComponentVerifyTicket(msgSignature,?timeStamp,?nonce,?postData);
??}?catch?(Exception?e)?{
????logger.error("系統(tǒng)異常",?e);
??}?finally?{
????//?響應(yīng)消息
????PrintWriter?out?=?response.getWriter();
????out.print("success");
??}
}復(fù)制代碼

2. トークンの取得

トークン (component_access_token) は、サードパーティ プラットフォーム インターフェイスの呼び出し資格情報(bào)です。トークンの取得には制限があります。各トークンの有効期限は 2 時(shí)間です。トークンはご自身で管理してください。トークンの有効期限が近づくと (たとえば、1 時(shí)間 50 分)、再度インターフェイスを呼び出して取得してください。

public?static?ComponentToken?getComponentToken(String?ticket)?{
????
RedisService<ComponentToken>?redisService?=?RedisService.load();

ComponentToken?componentToken?=?redisService.load(ComponentToken.COMPONENTTOKEN_ID,?ComponentToken.class);??
if?(componentToken?==?null)?{
??String?encryptAppId?=?ThirdPlat.PLAT_APPID;
??String?appId?=?EnDecryptUtil.d3esDecode(encryptAppId);
??String?encryptSecret?=?ThirdPlat.PLAT_SECRET;
??String?secret?=?EnDecryptUtil.d3esDecode(encryptSecret);
??????
??String?requestUrl?=?AuthAccessUrl.COMPONENT_ACCESS_URL;
??Map<String, String>?map?=?new?HashMap<>();?
??map.put("component_appid",?appId);?//第三方平臺(tái)appid
??map.put("component_appsecret",?secret);?//第三方平臺(tái)appsecret
??map.put("component_verify_ticket",?ticket);?
??String?outputStr?=?JSONObject.toJSONString(map);
??logger.warn("請(qǐng)求數(shù)據(jù)"+outputStr);
??JSONObject?jsonObject?=?HttpRequestUtils.httpRequest(requestUrl,?"POST",?outputStr);
????if?(null?!=?jsonObject)?{
????long?expires?=?System.currentTimeMillis()?+?7200;
????try{
??????expires?=?System.currentTimeMillis()?+?jsonObject.getIntValue("expires_in");????????
????}catch?(Exception?e)?{
????}
????try?{
??????componentToken?=?new?ComponentToken();
??????componentToken.setComponentAccessToken(jsonObject.getString("component_access_token"));
??????componentToken.setExpiresIn(expires);
??????redisService.save(componentToken,?ComponentToken.class);
????}?catch?(Exception?e)?{
??????componentToken?=?null;
??????logger.error("系統(tǒng)異常",?e);
????}
??}
}?else?{
??long?sysTime?=?System.currentTimeMillis();
??if?(sysTime?>=?componentToken.getExpiresIn())?{
????redisService.delete(ComponentToken.COMPONENTTOKEN_ID,?ComponentToken.class);
????componentToken?=?getComponentToken(ticket);
??}else{
??}
}
return?componentToken;
}復(fù)制代碼
WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について

3. 小さなプログラムを素早く作成する

快速創(chuàng)建小程序接口優(yōu)化了小程序注冊(cè)認(rèn)證的流程,能幫助第三方平臺(tái)迅速拓展線(xiàn)下商戶(hù),拓展商戶(hù)的服務(wù)范圍,占領(lǐng)小程序線(xiàn)下商業(yè)先機(jī)。采用法人人臉識(shí)別方式替代小額打款等認(rèn)證流程,極大的減輕了小程序主體、類(lèi)目資質(zhì)信息收集的人力成本。第三方平臺(tái)只需收集法人姓名、法人微信、企業(yè)名稱(chēng)、企業(yè)代碼信息這四個(gè)信息,便可以向企業(yè)法人下發(fā)一條模板消息來(lái)采集法人人臉信息,完成全部注冊(cè)、認(rèn)證流程。以及法人收到創(chuàng)建成功后的小程序APPID時(shí),同時(shí)下發(fā)模板消息給法人,提示法人進(jìn)行郵箱和密碼的設(shè)置,便于后續(xù)法人登陸小程序控制臺(tái)進(jìn)行管理。

通過(guò)該接口創(chuàng)建小程序默認(rèn)為“已認(rèn)證”。為降低接入小程序的成本門(mén)檻,通過(guò)該接口創(chuàng)建的小程序無(wú)需交 300 元認(rèn)證費(fèi)。

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?fastRegister(String?merchantId)?{
??Merchant?merchant?=?merchantService.getById(merchantId);
??if?(merchant?==?null)?{
??????logger.warn("快速創(chuàng)建小程序---->失敗,merchant為null");
??????return?AjaxResult.error("快速創(chuàng)建小程序失敗,merchant為null",null);
??}?else?{
??????RedisService<ComponentVerifyTicket>?redisService?=?RedisService.load();
??????ComponentVerifyTicket?componentVerifyTicket?=?redisService.load(ComponentVerifyTicket.COMPONENT_VERIFY_TICKET_ID,
??????????????ComponentVerifyTicket.class);
????if?(componentVerifyTicket?==?null)?{
????????logger.warn("快速創(chuàng)建小程序---->失敗,component_verify_ticket為null");
????????return?AjaxResult.error("快速創(chuàng)建小程序失敗,component_verify_ticket為null",null);
????}?else?{
????????ComponentToken?componentToken?=?AuthorizedUtils.getComponentToken(componentVerifyTicket.getComponentVerifyTicket());
????????RegisterWeappOut?out?=?new?RegisterWeappOut();
????????out.setName(merchant.getName())
????????????????.setCode(merchant.getCode())
????????????????.setCode_type(merchant.getCodeType())
????????????????.setLegal_persona_wechat(merchant.getLegalPersonaWechat())
????????????????.setLegal_persona_name(merchant.getLegalPersonaName())
????????????????.setComponent_phone(merchant.getComponentPhone());
????????JSONObject?obj?=?BaseUtils.createRegisterWeapp(componentToken,out);
????????if?(obj.getInteger("errcode")?==?0?&&?"ok".equalsIgnoreCase(obj.getString("errmsg")))?{
????????????return?AjaxResult.success();
????????}?else?{
????????????return?AjaxResult.error(obj.getInteger("errcode"),obj.getString("errmsg"));
????????}
????}
}
}?
復(fù)制代碼

4、獲取預(yù)授權(quán)碼

預(yù)授權(quán)碼(pre_auth_code)是第三方平臺(tái)方實(shí)現(xiàn)授權(quán)托管的必備信息,每個(gè)預(yù)授權(quán)碼有效期為 10 分鐘。需要先獲取令牌才能調(diào)用。

public?static?String?getPreAuthCode(String?ticket)?{
ComponentToken?componentToken?=?getComponentToken(ticket);
String?encryptAppId?=?ThirdPlat.PLAT_APPID;
String?appId?=?EnDecryptUtil.d3esDecode(encryptAppId);
String?url?=?AuthAccessUrl.PRE_AUTH_CODE_URL?+?componentToken.getComponentAccessToken();
Map<String, String>?map?=?new?HashMap<String, String>();
map.put("component_appid",?appId);
????JSONObject?jsonObject?=?HttpRequestUtils.httpRequest(url,?"POST",?JSONObject.toJSONString(map));???
return?jsonObject.getString("pre_auth_code");
}復(fù)制代碼

5、引導(dǎo)商戶(hù)授權(quán)獲取授權(quán)信息

第三方服務(wù)商構(gòu)建授權(quán)鏈接放置自己的網(wǎng)站,用戶(hù)點(diǎn)擊后,彈出授權(quán)頁(yè)面。

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?getMchWebAuthUrl(@PathVariable("id")?String?id)?{
RedisService<ComponentVerifyTicket>?redisService?=?RedisService.load();
ComponentVerifyTicket?componentVerifyTicket?=?redisService.load(ComponentVerifyTicket.COMPONENT_VERIFY_TICKET_ID,
????ComponentVerifyTicket.class);
if(componentVerifyTicket?==?null){
??return?AjaxResult.error("引入用戶(hù)進(jìn)入授權(quán)頁(yè)失敗,component_verify_ticket為null",null);
}else{
??String?preAuthCode?=?AuthorizedUtils.getPreAuthCode(componentVerifyTicket.getComponentVerifyTicket());
??String?encryptAppId?=?ThirdPlat.PLAT_APPID;
??String?appId?=?EnDecryptUtil.d3esDecode(encryptAppId);
??String?auth_type?=?ThirdPlat.AUTH_TYPE;
??String?requestUrl?=?AuthAccessUrl.WEB_AUTH_URL;
??try?{
????requestUrl?=?requestUrl.replace("COMPONENT_APPID",?appId).replace("PRE_AUTH_CODE",?preAuthCode)
????????.replace("REDIRECT_URI",?URLEncoder.encode(ThirdPlat.REDIRECT_URI.replace("MERCHANTID",?id),"UTF-8")).replace("AUTH_TYPE",?auth_type);
??}?catch?(UnsupportedEncodingException?e)?{
????e.printStackTrace();
??}
??logger.warn("步驟2:引入用戶(hù)進(jìn)入授權(quán)頁(yè)---->成功,url為:"?+?requestUrl);
??return?AjaxResult.success("操作成功",requestUrl);
??
}
}復(fù)制代碼

6、設(shè)置小程序基本信息

設(shè)置小程序名稱(chēng),當(dāng)名稱(chēng)沒(méi)有命中關(guān)鍵詞,則直接設(shè)置成功;當(dāng)名稱(chēng)命中關(guān)鍵詞,需提交證明材料,并需要審核。修改小程序的頭像。修改功能介紹。修改小程序隱私設(shè)置,即修改是否可被搜索。

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?setBasicInfo(BasicInfo?basicInfo)?throws?IOException?{
??Merchant?merchant?=?merchantService.getById(basicInfo.getMerchantId());
??if?(merchant?==?null)?{
??????logger.warn("設(shè)置基本信息---->失敗,merchant為null");
??????return?AjaxResult.error("設(shè)置基本信息失敗,merchant為null",null);
??}?else?{
??????AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??????//修改頭像
??????if?(StringUtils.isNotEmpty(basicInfo.getHeadImage()))?{
??????????UploadIn?uli?=?new?UploadIn();
??????????uli.setType("image").setUrlPath(basicInfo.getHeadImage());
??????????JSONObject?uploadJson?=?BaseUtils.upload(info,uli);
??????????String?mediaId?=?uploadJson.getString("media_id");
??????????ModifyHeadImageIn?mhi?=?new?ModifyHeadImageIn();
??????????mhi.setHead_img_media_id(mediaId).setX1("0").setY1("0").setX2("1").setY2("1");
??????????JSONObject?obj?=?BaseUtils.modifyHeadImage(info,mhi);
??????????if?(!obj.getInteger(ResStatus.ERRCODE).equals(ResStatus.CODE)?||?!ResStatus.MSG.equalsIgnoreCase(obj.getString(ResStatus.ERRMSG)))?{
??????????????return?AjaxResult.error(obj.getInteger(ResStatus.ERRCODE),obj.getString(ResStatus.ERRMSG));
??????????}?else?{
??????????????merchant.setAppletsHeadImg(basicInfo.getHeadImage());
??????????}
??????}
??????//修改名稱(chēng)
??????if?(StringUtils.isNotEmpty(basicInfo.getNickname()))?{
??????????UploadIn?uli?=?new?UploadIn();
??????????uli.setType("image").setUrlPath(merchant.getBusinessLicense());
??????????JSONObject?uploadJson?=?BaseUtils.upload(info,uli);
??????????String?mediaId?=?uploadJson.getString("media_id");
??????????SetNicknameIn?sni?=?new?SetNicknameIn();
??????????sni.setNick_name(basicInfo.getNickname());
??????????sni.setLicense(mediaId);
??????????JSONObject?obj?=?BaseUtils.setNickname(info,sni);
??????????if?(!obj.getInteger(ResStatus.ERRCODE).equals(ResStatus.CODE)?||?!ResStatus.MSG.equalsIgnoreCase(obj.getString(ResStatus.ERRMSG)))?{
??????????????return?AjaxResult.error(obj.getInteger(ResStatus.ERRCODE),obj.getString(ResStatus.ERRMSG));
??????????}?else?{
??????????????merchant.setAppletsName(basicInfo.getNickname());
??????????????if?(obj.containsKey("audit_id")?&&?StringUtils.isNotEmpty(obj.getString("audit_id")))?{
??????????????????merchant.setAuditId(obj.getString("audit_id"));
??????????????}
??????????}
??????}
??????//修改功能介紹
??????if?(StringUtils.isNotEmpty(basicInfo.getSignature()))?{
??????????ModifySignatureIn?msi?=?new?ModifySignatureIn();
??????????msi.setSignature(basicInfo.getSignature());
??????????JSONObject?obj?=?BaseUtils.modifySignature(info,?msi);
??????????if?(!obj.getInteger(ResStatus.ERRCODE).equals(ResStatus.CODE)?||?!ResStatus.MSG.equalsIgnoreCase(obj.getString(ResStatus.ERRMSG)))?{
??????????????return?AjaxResult.error(obj.getInteger(ResStatus.ERRCODE),obj.getString(ResStatus.ERRMSG));
??????????}?else?{
??????????????merchant.setAppletsSignature(basicInfo.getSignature());
??????????}
??????}
??????//修改隱私設(shè)置,即修改是否可被搜索
??????if?(StringUtils.isNotEmpty(basicInfo.getStatus()))?{
??????????SearchStatusIn?ssi?=?new?SearchStatusIn();
??????????ssi.setStatus(basicInfo.getStatus());
??????????JSONObject?obj?=?BaseUtils.changeWxaSearchStatus(info,?ssi);
??????????if?(!obj.getInteger(ResStatus.ERRCODE).equals(ResStatus.CODE)?||?!ResStatus.MSG.equalsIgnoreCase(obj.getString(ResStatus.ERRMSG)))?{
??????????????return?AjaxResult.error(obj.getInteger(ResStatus.ERRCODE),obj.getString(ResStatus.ERRMSG));
??????????}?else?{
??????????????merchant.setSearchStatus(basicInfo.getStatus());
??????????}
??????}
??????merchantService.updateById(merchant);
??????return?AjaxResult.success();
??}
}復(fù)制代碼

7、支付授權(quán)

即填寫(xiě)商戶(hù)號(hào)和商戶(hù)號(hào)密鑰,以及上傳p12證書(shū)

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について

8、設(shè)置服務(wù)器域名

授權(quán)給第三方的小程序,其服務(wù)器域名只可以為第三方平臺(tái)的服務(wù)器,當(dāng)小程序通過(guò)第三方平臺(tái)發(fā)布代碼上線(xiàn)后,小程序原先自己配置的服務(wù)器域名將被刪除,只保留第三方平臺(tái)的域名,所以第三方平臺(tái)在代替小程序發(fā)布代碼之前,需要調(diào)用接口為小程序添加第三方平臺(tái)自身的域名。

注意:

需要先將域名登記到第三方平臺(tái)的小程序服務(wù)器域名中,才可以調(diào)用接口進(jìn)行配置。

最多可以添加1000個(gè)合法服務(wù)器域名;其中,Request域名、Socket域名、Uploadfile域名、Download域名、Udp域名的設(shè)置數(shù)量均最大支持200個(gè)。

每月可提交修改申請(qǐng)50次。

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?modifyDomain(ModifyDomain?modifyDomain)?{
??Merchant?merchant?=?merchantService.getById(modifyDomain.getMerchantId());
??if?(merchant?==?null)?{
??????logger.warn("設(shè)置服務(wù)器域名---->失敗,merchant為null");
??????return?AjaxResult.error("設(shè)置服務(wù)器域名失敗,merchant為null",null);
??}?else?{
??????AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??????ModifyDomainOut?out?=?new?ModifyDomainOut();
??????out.setAction(modifyDomain.getAction());
??????String[]?requests?=?modifyDomain.getRequestdomain().split(",");
??????List<String>?requestList?=?Arrays.asList(requests);
??????out.setRequestdomain(requestList);
??????String[]?wsrequests?=?modifyDomain.getWsrequestdomain().split(",");
??????List<String>?wsrequestList?=?Arrays.asList(wsrequests);
??????out.setWsrequestdomain(wsrequestList);
??????String[]?uploads?=?modifyDomain.getUploaddomain().split(",");
??????List<String>?uploadList?=?Arrays.asList(uploads);
??????out.setUploaddomain(uploadList);
??????String[]?downloads?=?modifyDomain.getDownloaddomain().split(",");
??????List<String>?downloadsList?=?Arrays.asList(downloads);
??????out.setDownloaddomain(downloadsList);
??????JSONObject?obj?=?BaseUtils.modifyDomain(info,?out);
??????if("0".equals(obj.getString("errcode"))?&&?"ok".equalsIgnoreCase(obj.getString("errmsg"))){
??????????return?AjaxResult.success();
??????}?else?{
??????????return?AjaxResult.error(obj.getInteger("errcode"),obj.getString("errmsg"));
??????}
??}
}復(fù)制代碼

9、設(shè)置業(yè)務(wù)域名

授權(quán)給第三方的小程序,其業(yè)務(wù)域名只可以為第三方平臺(tái)的服務(wù)器,當(dāng)小程序通過(guò)第三方發(fā)布代碼上線(xiàn)后,小程序原先自己配置的業(yè)務(wù)域名將被刪除,只保留第三方平臺(tái)的域名,所以第三方平臺(tái)在代替小程序發(fā)布代碼之前,需要調(diào)用接口為小程序添加業(yè)務(wù)域名。

注意:

需要先將業(yè)務(wù)域名登記到第三方平臺(tái)的小程序業(yè)務(wù)域名中,才可以調(diào)用接口進(jìn)行配置。

為授權(quán)的小程序配置域名時(shí)支持配置子域名,例如第三方登記的業(yè)務(wù)域名如為 qq.com,則可以直接將 qq.com 及其子域名(如 xxx.qq.com)也配置到授權(quán)的小程序中。

最多可以添加100個(gè)業(yè)

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?webviewDomain(WebviewDomain?webviewDomain)?{
??Merchant?merchant?=?merchantService.getById(webviewDomain.getMerchantId());
??if?(merchant?==?null)?{
??????logger.warn("設(shè)置業(yè)務(wù)域名---->失敗,merchant為null");
??????return?AjaxResult.error("設(shè)置業(yè)務(wù)域名失敗,merchant為null",null);
??}?else?{
??????AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??????SetWebViewDomainOut?out?=?new?SetWebViewDomainOut();
??????out.setAction(webviewDomain.getAction());
??????String[]?webviews?=?webviewDomain.getWebviewdomain().split(",");
??????List<String>?webviewList?=?Arrays.asList(webviews);
??????out.setWebviewdomain(webviewList);
??????JSONObject?obj?=?BaseUtils.setWebViewDomain(info,?out);
??????if("0".equals(obj.getString("errcode"))?&&?"ok".equalsIgnoreCase(obj.getString("errmsg"))){
??????????return?AjaxResult.success();
??????}?else?{
??????????return?AjaxResult.error(obj.getInteger("errcode"),obj.getString("errmsg"));
??????}
??}
}復(fù)制代碼

10、上傳小程序代碼

第三方平臺(tái)需要先將草稿添加到代碼模板庫(kù),或者從代碼模板庫(kù)中選取某個(gè)代碼模板,得到對(duì)應(yīng)的模板 id(template_id);然后調(diào)用本接口可以為已授權(quán)的小程序上傳代碼。

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?commit(CommitModel?model)?{
??Merchant?merchant?=?merchantService.selectMerchantById(model.getMerchantId());
??if?(merchant?==?null)?{
??????logger.warn("上傳代碼---->失敗,merchant為null");
??????return?AjaxResult.error("上傳代碼,merchant為null",null);
??}
??AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??CommitIn?commitIn?=?new?CommitIn();
??String?value?=?model.getValue();
??String[]?items?=?value.split("_");
??String?version?=?items[2];
??commitIn.setTemplate_id(items[0])
??????????.setUser_desc(items[1])
??????????.setUser_version(version);

??//第三方自定義的配置
??JSONObject?obj?=?new?JSONObject();
??obj.put("extAppid",?merchant.getAppid());
??Map<String, Object>?map?=?new?HashMap<>();
??map.put("merchantId",?model.getMerchantId());
??map.put("userVersion",?commitIn.getUser_version());
??obj.put("ext",?map);
??map?=?new?HashMap<>();
??Map<String, Object>?maps?=?new?HashMap<>();
??maps.put("pages/index/index",?map);
??obj.put("extPages",?maps);
??commitIn.setExt_json(JSONObject.toJSONString(obj));
??//接受微信返回的數(shù)據(jù)
??obj?=?CodeUtils.commit(info,?commitIn);
??if("0".equals(obj.getString("errcode"))?&&?"ok".equalsIgnoreCase(obj.getString("errmsg"))){
??????AppletsRelease?ar?=?appletsReleaseService.getOne(new?LambdaQueryWrapper<AppletsRelease>()
??????????????.eq(AppletsRelease::getMerchantId,merchant.getId()));
??????if(ar?==?null){
??????????ar?=?new?AppletsRelease();
??????????ar.setMerchantId(model.getMerchantId()).setHistoryversion(version);
??????}?else{
??????????ar.setHistoryversion(version);
??????}
??????appletsReleaseService.saveOrUpdate(ar);
??????return?AjaxResult.success();
??}?else?{
??????return?AjaxResult.error(obj.getInteger("errcode"),obj.getString("errmsg"));
??}
}復(fù)制代碼
WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について

11、成員管理

第三方平臺(tái)在幫助旗下授權(quán)的小程序提交代碼審核之前,可先讓小程序運(yùn)營(yíng)者體驗(yàn),體驗(yàn)之前需要將運(yùn)營(yíng)者的個(gè)人微信號(hào)添加到該小程序的體驗(yàn)者名單中。

注意: 如果運(yùn)營(yíng)者同時(shí)也是該小程序的管理員,則無(wú)需綁定,管理員默認(rèn)有體驗(yàn)權(quán)限。

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
/**
*?綁定體驗(yàn)者
*?@parambindTester
*?@return
*/
@Override
public?AjaxResult?bindTester(BindTester?bindTester)?{
??Merchant?merchant?=?merchantService.getById(bindTester.getMerchantId());
??if?(merchant?==?null)?{
??????logger.warn("綁定體驗(yàn)者---->失敗,merchant為null");
??????return?AjaxResult.error("綁定體驗(yàn)者失敗,merchant為null",null);
??}?else?{
??????AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??????JSONObject?obj?=?MemberUtils.bindTester(info,?bindTester.getWechatId());
??????if("0".equals(obj.getString("errcode"))?&&?"ok".equalsIgnoreCase(obj.getString("errmsg"))){
??????AppletsTester?at?=?new?AppletsTester();
????????at.setMerchantId(bindTester.getMerchantId()).setWechatId(bindTester.getWechatId()).setUserStr(obj.getString("userstr"));
????????appletsTesterService.insertAppletsTester(at);
????????return?AjaxResult.success();
????}?else?{
????????return?AjaxResult.error(obj.getInteger("errcode"),obj.getString("errmsg"));
????}
}
}

/**
*?解除體驗(yàn)者
*?@paramtesterIds
*?@return
*/
@Override
public?AjaxResult?unbindTester(Long[]?testerIds)?{
??for?(Long?id?:?testerIds)?{
??????AppletsTester?tester?=?appletsTesterService.getById(id);
??????if?(tester?==?null)?{
??????????logger.warn("解除體驗(yàn)者---->失敗,tester為null");
??????????return?AjaxResult.error("解除體驗(yàn)者,tester為null",null);
??????}
??????Merchant?merchant?=?merchantService.getById(tester.getMerchantId());
??????if?(merchant?==?null)?{
??????????logger.warn("解除體驗(yàn)者---->失敗,merchant為null");
??????????return?AjaxResult.error("解除體驗(yàn)者,merchant為null",null);
??????????}
????????AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
????????JSONObject?obj?=?MemberUtils.unbindTester(info,?tester.getWechatId());
????????if("0".equals(obj.getString("errcode"))?&&?"ok".equalsIgnoreCase(obj.getString("errmsg"))){
????????????appletsTesterService.removeById(id);
????????}?else?{
????????????return?AjaxResult.error(obj.getInteger("errcode"),obj.getString("errmsg"));
????????}
????}
????return?AjaxResult.success();
}復(fù)制代碼

12、獲取體驗(yàn)版二維碼

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?getQrcode(String?merchantId)?{
??Merchant?merchant?=?merchantService.getById(merchantId);
??if?(merchant?==?null)?{
??????logger.warn("獲取體驗(yàn)二維碼---->失敗,merchant為null");
??????return?AjaxResult.error("獲取體驗(yàn)二維碼,merchant為null",null);
??}
??AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??String?qrcodeUrl?=??CodeUtils.getQrcode(info,?"pages/index/index");
??return?AjaxResult.success("操作成功",qrcodeUrl);
}復(fù)制代碼

13、提交審核

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?submitAudit(SubmitAudit?submit)?{
??Merchant?merchant?=?merchantService.getById(submit.getMerchantId());
??if?(merchant?==?null)?{
??????logger.warn("獲取體驗(yàn)二維碼---->失敗,merchant為null");
??????return?AjaxResult.error("獲取體驗(yàn)二維碼,merchant為null",?null);
??}
??AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??List<String>?categorys?=?submit.getCategory();
??submit.setFirst_id(categorys.get(0).split("-")[0])
??????????.setFirst_class(categorys.get(0).split("-")[1])
??????????.setSecond_id(categorys.get(1).split("-")[0])
??????????.setSecond_class(categorys.get(1).split("-")[1])
??????????.setTag(submit.getTag().replace(",",?"?"));
??List<SubmitAudit>?submits?=?new?ArrayList<>();
??submits.add(submit);
??JSONObject?sa?=?CodeUtils.submitAudit(info,?submits);
??if?(sa.getInteger(ResStatus.ERRCODE).equals(ResStatus.CODE)?&&?ResStatus.MSG.equalsIgnoreCase(sa.getString(ResStatus.ERRMSG)))?{
??????JSONObject?obj?=?CodeUtils.getAuditStatus(info,?sa.getString("auditid"));
??????if?(obj.getInteger(ResStatus.ERRCODE).equals(ResStatus.CODE)?&&?ResStatus.MSG.equalsIgnoreCase(obj.getString(ResStatus.ERRMSG)))?{
??????????AppletsRelease?ar?=?appletsReleaseService.getOne(new?LambdaQueryWrapper<AppletsRelease>()
??????????????????.eq(AppletsRelease::getMerchantId,merchant.getId()));
??????????if?(ar?==?null)?{
??????????????return?AjaxResult.error("請(qǐng)先上傳代碼");
??????????}
??????????ar.setMerchantId(submit.getMerchantId())
??????????????????.setAuditId(sa.getString("auditid"))
??????????????????.setStatus(obj.getString("status"))
??????????????????.setRemark(obj.getString("screenshot"));
??????????if?(AppletsRelease.STATUS_0.equals(ar.getStatus()))?{
??????????????ar.setRemark(AppletsRelease.MSG_0);
??????????}?else?if?(AppletsRelease.STATUS_1.equals(ar.getStatus()))?{
??????????????ar.setReason(obj.getString("reason"))
??????????????????????.setScreenshot(obj.getString("screenshot"))
??????????????????????.setRemark(AppletsRelease.MSG_1);
??????????}?else?if?(AppletsRelease.STATUS_2.equals(ar.getStatus()))?{
??????????????ar.setRemark(AppletsRelease.MSG_2);
??????????}?else?if?(AppletsRelease.STATUS_3.equals(ar.getStatus()))?{
??????????????ar.setRemark(AppletsRelease.MSG_3);
??????????}?else?if?(AppletsRelease.STATUS_4.equals(ar.getStatus()))?{
??????????????ar.setRemark(AppletsRelease.MSG_4);
??????????}
??????????appletsReleaseService.updateById(ar);
??????????return?AjaxResult.success();
??????}?else?{
??????????return?AjaxResult.error(obj.getInteger(ResStatus.ERRCODE),?obj.getString(ResStatus.ERRMSG));
??????}
??}?else?{
??????return?AjaxResult.error(sa.getInteger(ResStatus.ERRCODE),?sa.getString(ResStatus.ERRMSG));
??}
}復(fù)制代碼

14、審核撤回

注意: 單個(gè)帳號(hào)每天審核撤回次數(shù)最多不超過(guò) 1 次,一個(gè)月不超過(guò) 10 次。

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?undoCodeAudit(String[]?ids)?{
??StringBuilder?sb?=?new?StringBuilder();
??for?(String?id?:?ids)?{
??????Merchant?merchant?=?merchantService.getById(id);
??????AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??????JSONObject?obj?=?CodeUtils.undoCodeAudit(info);
??????if?(obj.getInteger(ResStatus.ERRCODE).equals(ResStatus.CODE)?&&?ResStatus.MSG.equalsIgnoreCase(obj.getString(ResStatus.ERRMSG)))?{
??????????AppletsRelease?ar?=?appletsReleaseService.getOne(new?LambdaQueryWrapper<AppletsRelease>()
??????????????????.eq(AppletsRelease::getMerchantId,merchant.getId()));
??????????ar.setStatus(AppletsRelease.MSG_3);
??????????appletsReleaseService.updateById(ar);
??????}?else{
??????????sb.append(merchant.getName()+",");
??????}
??}
??if?(sb.length()?==?0)?{
??????return?AjaxResult.success();
??}?else?{
??????String?name?=?sb.substring(0,?sb.length()-1);
??????return?AjaxResult.error(name+"審核撤回失敗");
??}
}復(fù)制代碼

15、發(fā)布已通過(guò)審核的小程序

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?releaseApplets(String[]?ids)?{
??StringBuilder?sb?=?new?StringBuilder();
??for?(String?id?:?ids)?{
??????Merchant?merchant?=?merchantService.getById(id);
??????AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??????JSONObject?obj?=?CodeUtils.release(info);
??????if?(obj.getInteger(ResStatus.ERRCODE).equals(ResStatus.CODE)?&&?ResStatus.MSG.equalsIgnoreCase(obj.getString(ResStatus.ERRMSG)))?{
??????????AppletsRelease?ar?=?appletsReleaseService.getOne(new?LambdaQueryWrapper<AppletsRelease>()
??????????????????.eq(AppletsRelease::getMerchantId,merchant.getId()));
??????????ar.setStatus(AppletsRelease.STATUS_5);
??????????appletsReleaseService.updateById(ar);
??????}?else{
??????????sb.append(merchant.getName()+",");
??????}
??}
??if?(sb.length()?==?0)?{
??????return?AjaxResult.success();
??}?else?{
??????String?name?=?sb.substring(0,?sb.length()-1);
??????return?AjaxResult.error(name+"發(fā)布失敗");
??}
}復(fù)制代碼

16、小程序版本回退

如果沒(méi)有上一個(gè)線(xiàn)上版本,將無(wú)法回退

只能向上回退一個(gè)版本,即當(dāng)前版本回退后,不能再調(diào)用版本回退接口。

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?revertCodeRelease(String[]?ids)?{
??StringBuilder?sb?=?new?StringBuilder();
??for?(String?id?:?ids)?{
??????Merchant?merchant?=?merchantService.getById(id);
??????AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??????JSONObject?obj?=?CodeUtils.revertCodeRelease(info);
??????if?(!(obj.getInteger(ResStatus.ERRCODE).equals(ResStatus.CODE)?&&?ResStatus.MSG.equalsIgnoreCase(obj.getString(ResStatus.ERRMSG))))?{
??????????sb.append(merchant.getName()+",");
??????}
??}
??if?(sb.length()?==?0)?{
??????return?AjaxResult.success();
??}?else?{
??????String?name?=?sb.substring(0,?sb.length()-1);
??????return?AjaxResult.error(null,name+"審核撤回失敗");
??}
}復(fù)制代碼

17、獲取小程序碼

WeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発について
public?AjaxResult?getMiniQrcode(@PathVariable("merchantId")?String?merchantId)?{
??Merchant?merchant?=?merchantService.getById(merchantId);
??if?(merchant?==?null)?{
??????logger.warn("獲取小程序碼---->失敗,merchant為null");
??????return?AjaxResult.error("獲取小程序碼,merchant為null",null);
??}
??String?qrcode;
??if?(StringUtils.isNotEmpty(merchant.getAppletImage()))?{
??????qrcode?=?merchant.getAppletImage();
??}?else?{
??????AuthorizationInfo?info?=?AuthorizedUtils.getAuthorizationInfo(merchant.getAppid());
??????qrcode?=?WxUtils.getMiniQrcode(merchantId,?"pages/index/index",?"merchant",?"miniQrcode",?info.getAuthorizer_access_token());
??????merchant.setAppletImage(qrcode);
??????merchantService.updateById(merchant);
??}
??return?AjaxResult.success("操作成功",qrcode);
}復(fù)制代碼

相關(guān)學(xué)習(xí)推薦:微信小程序教程

以上がWeChatオープンプラットフォームとサードパーティプラットフォーム開(kāi)発についての詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類(lèi)リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)