Commit 9c7e7d70 authored by Aivs's avatar Aivs

feat:调试基本接口

parent 2d73f11e
...@@ -74,6 +74,7 @@ ...@@ -74,6 +74,7 @@
"ts-pnp": "1.2.0", "ts-pnp": "1.2.0",
"typescript": "^4.2.3", "typescript": "^4.2.3",
"url-loader": "4.1.1", "url-loader": "4.1.1",
"vconsole": "^3.10.1",
"webpack": "4.44.2", "webpack": "4.44.2",
"webpack-dev-server": "3.11.1", "webpack-dev-server": "3.11.1",
"webpack-manifest-plugin": "2.2.0", "webpack-manifest-plugin": "2.2.0",
...@@ -89,8 +90,8 @@ ...@@ -89,8 +90,8 @@
"react-app", "react-app",
"react-app/jest" "react-app/jest"
], ],
"rules":{ "rules": {
"jsx-a11y/anchor-is-valid":"off" "jsx-a11y/anchor-is-valid": "off"
} }
}, },
"browserslist": { "browserslist": {
......
...@@ -28,6 +28,13 @@ ...@@ -28,6 +28,13 @@
<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script> <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
<script
src="https://res.wx.qq.com/mmbizwap/zh_CN/htmledition/js/vconsole/3.0.0/vconsole.min.js"
type="text/javascript"
></script>
<script>
var vConsole = new VConsole();
</script>
</head> </head>
<body> <body>
<noscript>You need to enable JavaScript to run this app.</noscript> <noscript>You need to enable JavaScript to run this app.</noscript>
......
...@@ -30,7 +30,7 @@ interface AuthResponse extends Response { ...@@ -30,7 +30,7 @@ interface AuthResponse extends Response {
interface TicketRes { interface TicketRes {
meta: { meta: {
nonceStr: string, noncestr: string,
timestamp: number, timestamp: number,
url: string, url: string,
}, },
......
...@@ -2,7 +2,8 @@ import axios from 'axios' ...@@ -2,7 +2,8 @@ import axios from 'axios'
// 后端地址 // 后端地址
// const baseURL = 'http://192.168.30.239:5000' // const baseURL = 'http://192.168.30.239:5000'
const baseURL = 'https://base.exploring.cn/wecom-server' const baseURL = 'https://base.exploring.cn/test-engine-user-center'
// const baseURL = 'https://base.exploring.cn/wecom-server'
// 创建 axios 实例 // 创建 axios 实例
const api = axios.create({ const api = axios.create({
...@@ -47,24 +48,24 @@ export const fetchExternalChat = async (externalChatId: string) => { ...@@ -47,24 +48,24 @@ export const fetchExternalChat = async (externalChatId: string) => {
// 根据 code 换取 userId,作为用户身份验证 // 根据 code 换取 userId,作为用户身份验证
export const fetchUserId = async (code: string) => { export const fetchUserId = async (code: string) => {
const response = await api.get<AuthResponse>('/api/qywx-proxy/user/getuserinfo', { // const response = await api.get<AuthResponse>('/api/qywx-proxy/user/getuserinfo', {
const response = await api.get('/user_center/getWxUserInfo', {
params: { params: {
code code
} }
}) })
return response.data.data;
return response.data.UserId;
} }
// 获取签名 // 获取签名
export const fetchSignatures = async () => { export const fetchSignatures = async () => {
const response = await api.get<TicketRes>('/api/qywx-utils/signatures', { const response = await api.get('/user_center/signatures', {
params: { params: {
url: window.location.href url: window.location.href
} }
}) })
// alert(JSON.stringify(response))
return response.data; return response.data.data;
} }
export default api export default api
.flex{
display: flex;
justify-content: space-between;
align-items: center;
}
.more{
width:30px;
height:30px;
}
\ No newline at end of file
...@@ -19,6 +19,7 @@ const AppWrapper = ( ...@@ -19,6 +19,7 @@ const AppWrapper = (
</ConfigProvider> </ConfigProvider>
) )
// ReactDOM.render(AppWrapper, document.getElementById('root')) // ReactDOM.render(AppWrapper, document.getElementById('root'))
console.log(config, fetchUserId, mockUserId)
checkRedirect(config, fetchUserId, mockUserId) checkRedirect(config, fetchUserId, mockUserId)
.then(() => initSdk(config, fetchSignatures)) .then(() => initSdk(config, fetchSignatures))
.then(() => ReactDOM.render(AppWrapper, document.getElementById('root'))) .then(() => ReactDOM.render(AppWrapper, document.getElementById('root')))
...@@ -50,6 +50,7 @@ const apis: wx.Api[] = [ ...@@ -50,6 +50,7 @@ const apis: wx.Api[] = [
'wwapp.getOpenData', 'wwapp.getOpenData',
'wwapp.initWwOpenData', 'wwapp.initWwOpenData',
'getCurExternalChat', 'getCurExternalChat',
"getContext"
]; ];
export default apis; export default apis;
...@@ -8,7 +8,7 @@ const fakeValue: Record<string, any> = { ...@@ -8,7 +8,7 @@ const fakeValue: Record<string, any> = {
}; };
// 根据外部判断是否为 mock 环境 // 根据外部判断是否为 mock 环境
const isWindowMock = window.isMock === true; const isWindowMock = window.isMock === false;
// 根据宿主环境判断是否要 mock // 根据宿主环境判断是否要 mock
const isHostMock = navigator.userAgent.toLowerCase().includes('chrome') const isHostMock = navigator.userAgent.toLowerCase().includes('chrome')
&& !navigator.userAgent.toLowerCase().includes('wxwork') && !navigator.userAgent.toLowerCase().includes('wxwork')
......
...@@ -27,7 +27,6 @@ const generateOAuthUrl = (config: Config) => { ...@@ -27,7 +27,6 @@ const generateOAuthUrl = (config: Config) => {
return `${key}=${value}`; return `${key}=${value}`;
}) })
.join('&'); .join('&');
return `https://open.weixin.qq.com/connect/oauth2/authorize?${search}#wechat_redirect`; return `https://open.weixin.qq.com/connect/oauth2/authorize?${search}#wechat_redirect`;
}; };
...@@ -35,7 +34,11 @@ const generateOAuthUrl = (config: Config) => { ...@@ -35,7 +34,11 @@ const generateOAuthUrl = (config: Config) => {
* 判断当前网页是否需要重定向 * 判断当前网页是否需要重定向
*/ */
const checkRedirect = async (config: Config, getUserId: GetUserId, mockUserId?: string) => { const checkRedirect = async (config: Config, getUserId: GetUserId, mockUserId?: string) => {
// debugger
if (isMock) { if (isMock) {
// let code='NWFkfNeQ1EgBc1Ay35wBwoIayUK1NWsCseiFT56VDoo'
// const newUserIds = await getUserId(code)
// 使用 mock 的 userId // 使用 mock 的 userId
if (mockUserId) { if (mockUserId) {
Cookies.set('userId', mockUserId); Cookies.set('userId', mockUserId);
...@@ -44,7 +47,6 @@ const checkRedirect = async (config: Config, getUserId: GetUserId, mockUserId?: ...@@ -44,7 +47,6 @@ const checkRedirect = async (config: Config, getUserId: GetUserId, mockUserId?:
} }
const userId = Cookies.get('userId') const userId = Cookies.get('userId')
const unAuth = !userId || userId === 'undefined' || userId === 'null' const unAuth = !userId || userId === 'undefined' || userId === 'null'
const codeExist = window.location.search.includes('code'); const codeExist = window.location.search.includes('code');
...@@ -57,10 +59,9 @@ const checkRedirect = async (config: Config, getUserId: GetUserId, mockUserId?: ...@@ -57,10 +59,9 @@ const checkRedirect = async (config: Config, getUserId: GetUserId, mockUserId?:
// 判断是否需要重新获取 userId // 判断是否需要重新获取 userId
if (unAuth) { if (unAuth) {
const code = qs.parse(window.location.search.slice(1)).code as string const code = qs.parse(window.location.search.slice(1)).code as string
const newUserId:any = await getUserId(code)
const newUserId = await getUserId(code) Cookies.set('userInfo', newUserId)
Cookies.set('userId', newUserId.userid)
Cookies.set('userId', newUserId)
} }
}; };
......
...@@ -15,21 +15,31 @@ export type GetSignatures = () => Promise<TicketRes> ...@@ -15,21 +15,31 @@ export type GetSignatures = () => Promise<TicketRes>
*/ */
const initSdk = async (config: Config, getSignatures: GetSignatures) => { const initSdk = async (config: Config, getSignatures: GetSignatures) => {
const { corpId, agentId } = config; const { corpId, agentId } = config;
// 获取 ticket // 获取 ticket
const signaturesRes = await getSignatures();
const signaturesRes = await getSignatures();
console.log(signaturesRes)
// alert('signaturesRes '+JSON.stringify(signaturesRes))
const configRes = await jsSdk.config({
beta: true,
debug: true,
appId: 'ww25792c97eaa37ba7',
timestamp: signaturesRes.meta.timestamp,
nonceStr: signaturesRes.meta.noncestr,
signature: signaturesRes.corp.signature,
jsApiList: apis,
})
console.log(configRes+"configRes")
const agentConfigRes = await jsSdk.agentConfig({ const agentConfigRes = await jsSdk.agentConfig({
corpid: corpId, corpid: corpId,
agentid: agentId, agentid: agentId,
timestamp: signaturesRes.meta.timestamp, timestamp: signaturesRes.meta.timestamp,
nonceStr: signaturesRes.meta.nonceStr, nonceStr: signaturesRes.meta.noncestr,
signature: signaturesRes.app.signature, signature: signaturesRes.app.signature,
jsApiList: apis, jsApiList: apis,
}).catch(e => { }).catch(e => {
console.error(e) console.log('错误信息'+JSON.stringify(e))
}); });
console.log('agentConfig res', agentConfigRes); console.log('agentConfig res', agentConfigRes);
wx.error(console.error); wx.error(console.error);
......
import * as React from 'react' import * as React from 'react'
import {useEffect, useState} from 'react' import {useEffect, useState} from 'react'
import {fetchExternalUser} from '../api' import {fetchExternalUser} from '../api'
import {jsSdk} from "../index"; import {jsSdk} from "../index"
import {Button, message, Spin} from "antd"; import {Button, message, Spin} from "antd";
// 性别Map // 性别Map
const genderMap = ['未定义', '男', '女'] const genderMap = ['未定义', '男', '女']
const ExternalUser: React.FC = () => { const ExternalUser: React.FC = () => {
const [loading, setLoading] = useState<boolean>(true) const [loading, setLoading] = useState<boolean>(true)
const [externalUser, setExternalUser] = useState<ExternalUserResponse['external_contact'] | void>() const [externalUser, setExternalUser] = useState<ExternalUserResponse['external_contact'] | void>()
const getExternalUserInfo = async () => { const getExternalUserInfo = async () => {
const res = await jsSdk.invoke<{ userId?: string }>('getCurExternalContact', {}) const res = await jsSdk.invoke<{ userId?: string }>('getCurExternalContact', {})
// alert(JSON.stringify(res))
if (!res || !res.userId) return if (!res || !res.userId) return
console.log('外部联系人 ID', res.userId); console.log('外部联系人 ID', res.userId);
......
import React, {FC, useEffect, useState} from "react"; import React, {FC, useEffect, useState} from "react";
import Cookies from "js-cookie"; import Cookies from "js-cookie";
import {fetchUser} from "../api"; import {fetchUser} from "../api";
import {Spin} from "antd"; import {Spin,Button} from "antd";
import { SearchOutlined } from '@ant-design/icons';
import './../css/home.css'
const Home: FC = () => { const Home: FC = () => {
const [loading, setLoading] = useState<boolean>(false); const [loading, setLoading] = useState<boolean>(false);
...@@ -10,11 +12,11 @@ const Home: FC = () => { ...@@ -10,11 +12,11 @@ const Home: FC = () => {
// 获取当前外部联系人信息 // 获取当前外部联系人信息
const getUserInfo = async () => { const getUserInfo = async () => {
setLoading(true); setLoading(true);
const userId = Cookies.get('userId') // const userId = Cookies.get('userId')
const userInfo:any = Cookies.get('userInfo')
// const userInfo = await fetchUser(userId || '')
const userInfo = await fetchUser(userId || '') setUser(JSON.parse(userInfo))
setUser(userInfo)
setLoading(false) setLoading(false)
} }
...@@ -25,7 +27,17 @@ const Home: FC = () => { ...@@ -25,7 +27,17 @@ const Home: FC = () => {
return ( return (
<Spin spinning={loading}> <Spin spinning={loading}>
<div> <div>
<h1>欢迎回来,{user ? user.name : ''}</h1> <h1>欢迎回来,{user ? user.name: ''}</h1>
</div>
<div className="flex">
<span>用户看板</span>
<Button type="primary" icon={<SearchOutlined />}>查找客户</Button>
</div>
<div className="custom">
<div className="flex">
<p>客户信息</p>
<img src="./../assets/images/js.png" className="more" alt="" />
</div>
</div> </div>
</Spin> </Spin>
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment