知è˜(shÃ)
ä¸ç®¡æ˜¯ç¶²(wÇŽng)站,軟件還是å°ç¨‹åºï¼Œéƒ½è¦ç›´æŽ¥æˆ–間接能為您產(chÇŽn)生價(jià )值,我們?cè)è°§éžç¬ƒæ¹Ÿæ›ˆX(jué)表ç¾(xià n)çš„åŒæ™‚(shÃ),更å´(cè)é‡äºŽåŠŸèƒ½çš„ä¾¿æ·ï¼Œç‡Ÿ(yÃng)銷的便利,é‹(yùn)營(yÃng)的高效,讓網(wÇŽng)ç«™æˆç‚ºç‡Ÿ(yÃng)銷工具,讓軟件能切實(shÃ)æå‡ä¼æ¥(yè)å…§(nèi)éƒ¨ç®¡ç†æ°´å¹³å’Œæ•ˆçŽ‡ã€‚å„ª(yÅu)秀的程åº?yà n)楹笃è°î¥?jÃ)æä¾›ä¾¿æ·çš„æ”¯æŒï¼
您當(dÄng)å‰ä½ç½®>首é (yè) » æ–°èžè³‡è¨Š » 公眾號(hà o)相關(guÄn) >
uni-app微信公眾號(hà o)web JS-SDKé–‹(kÄi)發(fÄ)之一接入
發(fÄ)表時(shÃ)間:2020-9-25
發(fÄ)布人:葵宇科技
ç€è¦½æ¬¡æ•¸(shù):74
目錄
- 目標(biÄo)
- uni-appH5接入JS-SDK
- 接入說(shuÅ)明
- 1,ç’°(huán)境說(shuÅ)明
- 2,JS-SDK接入說(shuÅ)明
- 3,è³‡æºæº–(zhÇ”n)å‚™
- é–‹(kÄi)始接入
- 本人å‰åŽç«¯é–‹(kÄi)發(fÄ)框架
- 第一æ¥,下載webé–‹(kÄi)發(fÄ)者工具
- 第二æ¥,uni-app安è£JS-SDKå¹¶åˆå§‹åŒ–(å‰ç«¯)
- 第三æ¥,åˆå§‹åŒ–微信公眾賬號(hà o)沙盒
- 點(diÇŽn)擊上é¢çš„`微信公眾平臺(tái)æŽ¥å£æ¸¬(cè)試帳號(hà o)申請(qÇng)`進(jìn)入沙盒申請(qÇng)
- é…ç½®JS安全域å(é‡è¦ã€é‡è¦ã€é‡è¦)
- 第四æ¥,åŽç«¯æŽ¥å…¥å¾®ä¿¡å…¬çœ¾è™Ÿ(hà o),實(shÃ)ç¾(xià n)wx.configé…ç½®åƒæ•¸(shù)(åŽç«¯)
- 1. æä¾›jsSdkConfig接å£(公共接å£)
- 2. 引入公眾號(hà o)å°(duì)接ä¾è³´
- 3.é…ç½®WxMpService Bean
- 第五æ¥,å‰ç«¯èª¿(dià o)用é…置接å£åˆå§‹åŒ–é…ç½®
- ç²å–é…置接å£
- jsé…ç½®
- ç¬¬å…æ¥,確èª(rèn)
目標(biÄo)
完æˆåŸºäºŽuni-app H5平臺(tái)上微信公眾號(hà o)JS-SDK的接入
uni-appH5接入JS-SDK
接入說(shuÅ)明
1,ç’°(huán)境說(shuÅ)明
- vue版的uni-appç’°(huán)境,使用npm來(lái)管ç†uni-appå…·å‚™æ›´å¥½çš„éˆæ´»æ€§,ä¸ç”¨é™åˆ¶åœ¨HBuilder上開(kÄi)發(fÄ),å¦‚æžœä¸æ˜¯ç”¨npm管ç†,那么需è¦åœ¨htmlä¸å°Ž(dÇŽo)å…¥js
- (å¯é¸)微信公眾號(hà o)賬號(hà o),這䏿˜¯å¿…需的,å› ?yà n)槲⑿盘å³â”¯è¢¦y(cè)試號(hà o)的沙盒環(huán)境,å› æ¤,具有個(gè)人微信號(hà o)在開(kÄi)發(fÄ)階段也是å¯è¡Œçš„
- (å¯é¸)公網(wÇŽng)webåœ°å€æ–¹ä¾¿å…¬ç¶²(wÇŽng)測(cè)試,但基于內(nèi)ç¶²(wÇŽng)調(dià o)試,å¯ä»¥å½¢æˆèª¿(dià o)試閉環(huán),但需è¦èƒ½å¤ 訪å•(wèn)外網(wÇŽng)的能力,å› ?yà n)æ©î€³Lå•(wèn)微信。
2,JS-SDK接入說(shuÅ)明
先說(shuÅ)一下整體的接入概è¦,讓整個(gè)框架有個(gè)æ€è·¯
- JS-SDK本質(zhì)是通éŽ(guò)js注入完æˆçš„,為webé (yè)é¢æä¾›ä¸€äº›åŸºäºŽå¾®ä¿¡å®¢æˆ¶ç«¯é‹(yùn)行時(shÃ)的便æ·åŠŸèƒ½,比如:圖片上傳ã€å¾®ä¿¡ç™»éŒ„ã€åˆ†äº«ã€åœ°ç†ä½ç½®ã€æŽƒä¸€æŽƒã€æ”¯ä»˜ç‰,總的來(lái)說(shuÅ)就是é¢å‘手機(jÄ«)底層的一些應(yÄ«ng)用。我們接入JS-SDK的目的就是為了讓H5ç¶²(wÇŽng)é (yè),具有åƒ"App"一樣的功能。
- JS-SDKä¸çš„功能是å—微信é™åˆ¶çš„,這里JS-SDK的功能方法,就是微信文檔ä¸çš„“接å£â€,所有接å£éƒ½æ˜¯å—微信管控的,這也能ç†è§£,æ¯”å¦‚åƒæ”¯ä»˜é€™é¡ž,肯定就需è¦èˆ‡å¾®ä¿¡ç”¢(chÇŽn)生通訊è¯(lián)系。這里的“é™åˆ¶â€æ˜¯å»£ç¾©çš„,也包å«ä¸€äº›ç„¡(wú)é™åˆ¶çš„æŽ¥å£
- 微信“é™åˆ¶â€äº†æŽ¥å£,那是為了考慮用戶安全,
需è¦åœ¨å¾®ä¿¡å…¬çœ¾è³¬è™Ÿ(hà o)é…置“JS安全域åâ€
,é…置了æ¤åŸŸå,H5é (yè)颿‰èƒ½æŽ¥å…¥JS-SDK,作為微信æœå‹™(wù)商也就知é“äº†ä½ æ˜¯èª°(shuÃ),所以當(dÄng)H5被打開(kÄi)時(shÃ),微信æœå‹™(wù)商知é““é (yè)é¢çš„æä¾›è€…是誰(shuÃ)(這里的主體是公眾號(hà o))â€,åŒæ™‚(shÃ)ä¹ŸçŸ¥é“æ˜¯èª°(shuÃ)打開(kÄi)çš„H5é (yè)é¢(微信用戶)
?;谶@點(diÇŽn)原ç†,微信端的H5é (yè)颿‰“通了用戶與æœå‹™(wù)商標(biÄo)è˜(shÃ)的通é“,極大æå‡äº†ä¾¿æ·æ€§ã€‚ - 微信公眾號(hà o)的登錄é‚輯,
登錄是基于OAuth2的第三方授權(quán)登錄é‚輯來(lái)實(shÃ)ç¾(xià n)的。
,至于原ç†ç¨åŽå†èªª(shuÅ),這里åªéœ€è¦æ³¨æ„一點(diÇŽn),第三方授權(quán)登錄會(huì)é‡å®šå‘到公眾號(hà o)H5é (yè)é¢,䏿”¯æŒåŸºäºŽajax的方å¼
3,è³‡æºæº–(zhÇ”n)å‚™
æœ¬æ–‡åªæ˜¯è¼”助教程,所以還是需è¦ä¸€äº›è³‡æº
- JS-SDK說(shuÅ)明文檔
- 微信公眾平臺(tái)æŽ¥å£æ¸¬(cè)試帳號(hà o)申請(qÇng)
- webé–‹(kÄi)發(fÄ)者工具
- 公網(wÇŽng)訪å•(wèn)å…§(nèi)ç¶²(wÇŽng)方案:Frp輕æ¾è§£æ±ºå…§(nèi)ç¶²(wÇŽng)訪å•(wèn)方案
é–‹(kÄi)始接入
å‰é¢èªª(shuÅ)了那么多廢話,終于è¦çœ‹æ˜¯å¯¦(shÃ)干了。
本人å‰åŽç«¯é–‹(kÄi)發(fÄ)框架
- å‰ç«¯uni-app
- åŽç«¯mavenã€Spring Boot
第一æ¥,下載webé–‹(kÄi)發(fÄ)者工具
在上é¢çš„連接地å€ä¸,下載webé–‹(kÄi)發(fÄ)者工具,方便é (yù)覽
第二æ¥,uni-app安è£JS-SDKå¹¶åˆå§‹åŒ–(å‰ç«¯)
- 安è£
npm install weixin-js-sdk --save # --saveå°‡ä¾è³´ä¿å˜åˆ°package.jsonä¸
- åˆå§‹åŒ–(這里是指åˆå§‹åŒ–JSç’°(huán)境,䏿˜¯åˆå§‹åŒ–é…ç½®)
import wx from 'weixin-js-sdk';
//這里將wxé‡å‘½å為wxmp的全局變é‡,目的是防æ¢èˆ‡uni-appç‰ç™¼(fÄ)ç”Ÿè®Šé‡æ²–çªã€‚
window.wxmp = wx
這里說(shuÅ)明一下wxmp.config方法是JS-SDK的功能åˆå§‹åŒ–,其䏿¶‰åŠåˆ°AppIdã€åŠ å¯†ç®—æ³•ã€ç°½åç‰,所有config方法ä¸çš„åƒæ•¸(shù)我們是通éŽ(guò)æœå‹™(wù)端ç²å–çš„
第三æ¥,åˆå§‹åŒ–微信公眾賬號(hà o)沙盒
點(diÇŽn)擊上é¢çš„微信公眾平臺(tái)æŽ¥å£æ¸¬(cè)試帳號(hà o)申請(qÇng)
進(jìn)入沙盒申請(qÇng)
授權(quán)登錄åŽå¦‚下:
é…ç½®JS安全域å(é‡è¦ã€é‡è¦ã€é‡è¦)
由于沙盒環(huán)境,å¯ä»¥é…置內(nèi)ç¶²(wÇŽng)ã€localhost地å€
第四æ¥,åŽç«¯æŽ¥å…¥å¾®ä¿¡å…¬çœ¾è™Ÿ(hà o),實(shÃ)ç¾(xià n)wx.configé…ç½®åƒæ•¸(shù)(åŽç«¯)
1. æä¾›jsSdkConfig接å£(公共接å£)
import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/openApi/comm")
public class JsSdkRest {
@Resource
private WxMpService wxMpService;
@GetMapping("jsSdkConfig")
@GetMapping("jsSdkConfig")
public RestObjectResponse<WxJsapiSignature> jsSdkConfig(@ApiParam("urlåŒ…å«æŸ¥è©¢åƒæ•¸(shù)") @RequestParam("url") String url) throws WxErrorException {
return RestObjectResponse.ok(wxMpService.createJsapiSignature(url));
}
}
RestObjectResponse
ä½ æ‡‰(yÄ«ng)該沒(méi)有,自行替æ›
2. 引入公眾號(hà o)å°(duì)接ä¾è³´
WxMpService
是基于開(kÄi)æºçš„公眾號(hà o)接入庫(kù)mavenä¾è³´å¦‚下:
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.9.0</version>
</dependency>
3.é…ç½®WxMpService Bean
我沒(méi)有用starter版,ç¿’(xÃ)慣自行é…ç½®bean,é€™æ¨£æ›´éˆæ´»
@Configuration
public class WxConfiguration {
/**
* 微信公眾號(hà o)é…ç½®
* @return
*/
@Bean
public WxMpService wxMpService(){
WxMpServiceImpl wxMpService = new WxMpServiceImpl();
WxMpDefaultConfigImpl conf = new WxMpDefaultConfigImpl();
conf.setAppId(ProjectWxMpConfigBean.INSTANCE.getAppId());
conf.setSecret(ProjectWxMpConfigBean.INSTANCE.getSecret());
conf.setToken(ProjectWxMpConfigBean.INSTANCE.getToken());
conf.setAesKey(ProjectWxMpConfigBean.INSTANCE.getAesKey());
wxMpService.setWxMpConfigStorage(conf);
return wxMpService;
}
}
第五æ¥,å‰ç«¯èª¿(dià o)用é…置接å£åˆå§‹åŒ–é…ç½®
ç²å–é…置接å£
其實(shÃ)這沒(méi)啥好說(shuÅ)çš„,但是有一點(diÇŽn)éœ€è¦æ³¨æ„,那就是ç²å–é…置接å£éœ€è¦å‚³å…¥urlå¹¶ä¸”åŒ…å«æŸ¥è©¢åƒæ•¸(shù)
åƒè€ƒä»£ç¢¼:
let getJsSdkConfig = ()=>{
let url = escape(window.location.href)
return PFApi.apiGet(
{
uri:'/openApi/comm/jsSdkConfig'
},{url:url})
}
export const ApiComm = {
getJsSdkConfig:getJsSdkConfig
}
é€™é‡Œé †ä¾¿å•°å—¦ä¸€ä¸‹url組æˆ
ç´…æ¡†ä¸æ¯å€‹(gè)屬性自行ç†è§£,肯定是有差異的。
jsé…ç½®
wxmp.config({
debug: true, // é–‹(kÄi)啟調(dià o)試模å¼,調(dià o)用的所有api的返回值會(huì)在客戶端alert出來(lái),è‹¥è¦æŸ¥çœ‹å‚³å…¥çš„åƒæ•¸(shù),å¯ä»¥åœ¨pc端打開(kÄi),åƒæ•¸(shù)ä¿¡æ¯æœƒ(huì)通éŽ(guò)log打出,僅在pc端時(shÃ)æ‰æœƒ(huì)打å°ã€‚
appId: '', // å¿…å¡«,公眾號(hà o)的唯一標(biÄo)è˜(shÃ)
timestamp: , // å¿…å¡«,生æˆç°½å的時(shÃ)間戳
nonceStr: '', // å¿…å¡«,生æˆç°½å的隨機(jÄ«)串
signature: '',// å¿…å¡«,ç°½å
jsApiList: [] // å¿…å¡«,需è¦ä½¿ç”¨çš„JS接å£åˆ—表
});
jsApiList,è¦ç”¨åˆ°çš„wx方法都需è¦é…置在這里é¢,å—符串?dÄng)?shù)組,方法å
ç¬¬å…æ¥,確èª(rèn)
刷新é (yè)é¢å‡ºç¾(xià n)下é¢çš„彈框說(shuÅ)明é…ç½®ok,å¦‚æžœå ±(bà o)錯(cuò),æ ¹æ“š(jù)錯(cuò)誤碼在微信文檔去找
相關(guÄn)案例查看更多
相關(guÄn)閱讀
- ç¶²(wÇŽng)站建è¨(shè)æœå‹™(wù)å…¬å¸
- ç¶²(wÇŽng)絡(luò)å…¬å¸å“ªå®¶å¥½
- ç¶²(wÇŽng)站排å優(yÅu)化
- å°ç¨‹åºé–‹(kÄi)發(fÄ)平臺(tái)å‰åå
- 云å—çœå»ºè¨(shè)廳網(wÇŽng)站官網(wÇŽng)
- éœ¸å±æŽ¨å»£
- ç¶²(wÇŽng)站建è¨(shè)特性
- æ—¥æ·çµ„ä»¶
- 云å—ç¶²(wÇŽng)站建è¨(shè)哪家公å¸å¥½
- 云å—ç¶²(wÇŽng)站建è¨(shè) ç¶²(wÇŽng)絡(luò)æœå‹™(wù)
- å°ç¨‹åºå•†åŸŽ
- ç¶²(wÇŽng)站建è¨(shè)
- 云å—ç¶²(wÇŽng)站建è¨(shè)å°ˆæ¥(yè)å“牌
- 出入å°ç¨‹åº
- ç¶²(wÇŽng)絡(luò)å…¬å¸
- 昆明å°ç¨‹åºé–‹(kÄi)發(fÄ)è¯(lián)系方å¼
- å°ç¨‹åºå®šåˆ¶
- 云å—çœä½æˆ¿å»ºè¨(shè)廳網(wÇŽng)ç«™
- 釿…¶ç¶²(wÇŽng)站建è¨(shè)å…¬å¸
- 人人商城
- 云å—å°ç¨‹åºé–‹(kÄi)發(fÄ)å…¬å¸å“ªå®¶å¥½
- é—œ(guÄn)éµè©žå¿«é€ŸæŽ’å
- å ±(bà o)廢車拆解回收管ç†ç³»çµ±(tÇ’ng)
- 百度å°ç¨‹åº
- 百度å°ç¨‹åºé–‹(kÄi)發(fÄ)å…¬å¸
- äºŒå‰æ¨¹(shù)
- vueé–‹(kÄi)發(fÄ)å°ç¨‹åº
- 手機(jÄ«)ç¶²(wÇŽng)站建è¨(shè)
- 文山å°ç¨‹åºé–‹(kÄi)發(fÄ)
- 云å—ç¶²(wÇŽng)站建è¨(shè)è²»(fèi)用