web对接微信获取OpenId

/*
 * @Author: hjl
 * @Date: 2020-08-15 18:10:33
 * @LastEditTime: 2020-08-20 20:24:00
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \webchat_project_copy\src\utils\wechatOpenId.js
 */

import {getUserOpenIdd} from "@/api/apiz" // getUserOpenIdd为后端提供的获取openid接口
function getUrlKey(name){ //获取url参数
  return decodeURIComponent((new RegExp('[?|&]'+name+'='+'([^&;]+?)(&|#|;|$)').exec(location.href)||[,""])[1].replace(/\+/g,'%20'))||null;
}
function getCodeApi(state,urll){//获取code
  let urls = urll == undefined || '' ? 'https://web.bethuguard.com/#/wxihome' : urll
  let urlNow= encodeURIComponent(urls);
  let scope='snsapi_userinfo';    //snsapi_userinfo   //静默授权 用户无感知 https://xxxxxxxxxxxx'
  let appid='wx93371565ee646f7d'; // 测试appid 根据实际情况替换
  let url=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${urlNow}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`;
  window.location.replace(url);
}
function getOpenIdApi(code) {
  getUserOpenIdd(code).then(result => {
    let { data: res } = result
    if(res.code == 0){
      sessionStorage.setItem('oId',res.data.openid)
    }else{
      console.log(res.msg,'获取OpenId错误')
    }
  })
}
export const getOpenId = function (next,url) {
  let code = getUrlKey("code");
  let oId = sessionStorage.getItem('oId')
  if(oId) {
    next()
  }else {
    if (code) {
      console.log('用户授权过直接换openId')
      getOpenIdApi(code)
      next()
    } else {
      console.log('跳转授权页面')
      getCodeApi("123",url);
    }
  }
}

在需要获取OpenId的页面导入方法即可:

import { getOpenId } from "@/utils/wechatOpenId" // 引入方法

beforeRouteEnter (to, from, next) {
  getOpenId(next,'http://192.168.124.6:8080/#/userLogin') // url表示重定向地址
}
/*
 * @Author: hjl
 * @Date: 2020-08-15 18:10:33
 * @LastEditTime: 2020-08-20 20:24:00
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \webchat_project_copy\src\utils\wechatOpenId.js
 */

import {getUserOpenIdd} from "@/api/apiz" // getUserOpenIdd为后端提供的获取openid接口
function getUrlKey(name){ //获取url参数
  return decodeURIComponent((new RegExp('[?|&]'+name+'='+'([^&;]+?)(&|#|;|$)').exec(location.href)||[,""])[1].replace(/\+/g,'%20'))||null;
}
function getCodeApi(state,urll){//获取code
  let urls = urll == undefined || '' ? 'https://web.bethuguard.com/#/wxihome' : urll
  let urlNow= encodeURIComponent(urls);
  let scope='snsapi_userinfo';    //snsapi_userinfo   //静默授权 用户无感知 https://xxxxxxxxxxxx'
  let appid='wx93371565ee646f7d'; // 测试appid 根据实际情况替换
  let url=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${urlNow}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`;
  window.location.replace(url);
}
function getOpenIdApi(code) {
  getUserOpenIdd(code).then(result => {
    let { data: res } = result
    if(res.code == 0){
      sessionStorage.setItem('oId',res.data.openid)
    }else{
      console.log(res.msg,'获取OpenId错误')
    }
  })
}
export const getOpenId = function (next,url) {
  let code = getUrlKey("code");
  let oId = sessionStorage.getItem('oId')
  if(oId) {
    next()
  }else {
    if (code) {
      console.log('用户授权过直接换openId')
      getOpenIdApi(code)
      next()
    } else {
      console.log('跳转授权页面')
      getCodeApi("123",url);
    }
  }
}

在需要获取OpenId的页面导入方法即可:

import { getOpenId } from "@/utils/wechatOpenId" // 引入方法

beforeRouteEnter (to, from, next) {
  getOpenId(next,'http://192.168.124.6:8080/#/userLogin') // url表示重定向地址
}
### 关于 DeepSeek 与微信集成的开发指南 #### 集成概述 为了实现 DeepSeek 和微信之间的无缝对接,开发者可以利用现有的 API 接口和服务端 SDK 来完成消息传递、事件处理等功能。通过这种方式,能够使企业级应用程序更加便捷地接入到微信生态中去[^1]。 #### 技术栈准备 - **编程语言**: Python, Node.js 或其他支持 HTTP 请求的语言。 - **框架工具**: Express (Node.js), Flask/Django(Python)Web 框架用于搭建服务器接收来自微信公众平台的消息推送请求。 - **第三方库**: `wechatpy` 是一个非常流行的用来操作微信公众号接口的Python 库;对于 JavaScript 用户来说,则可以选择官方提供的 WeixinJSBridge 或者类似的 npm 包来进行交互。 #### 实现步骤详解 创建自定义菜单并绑定至特定 URL 地址以便触发回调函数执行业务逻辑。当用户点击相应按钮时会向该链接发送 GET/POST 请求携带 OpenID 参数等信息供后台解析使用。 ```javascript // 示例代码:设置响应微信服务器验证所需的 token 校验机制(Node.js 版本) const express = require('express'); const crypto = require('crypto'); let app = express(); app.get('/weixin', function(req, res){ let signature = req.query.signature; let timestamp = req.query.timestamp; let nonce = req.query.nonce; let echostr = req.query.echostr; const TOKEN = 'your_token'; // 自己设定的安全令牌 let tmpArr = [TOKEN,timestamp,nonce].sort().join(''); let sha1 = crypto.createHash('sha1'); let hash = sha1.update(tmpArr).digest('hex'); if(hash === signature){ console.log("success"); res.send(echostr); }else{ console.error("failed"); res.send('failed'); } }); ``` 针对具体应用场景如客服聊天机器人,可以通过调用微信智能回复插件API获取预设答案模板或是借助像 DeepSeek 这样的 AI 平台进行自然语言理解(NLU),从而提供更精准的服务体验给最终使用者[^2]。 #### 安全性和隐私保护措施 在整个过程中务必重视数据传输过程中的安全性问题,在配置 HTTPS 协议基础上还需要考虑采用 OAuth2.0 认证授权方式确保只有合法的应用程序才能访问敏感资源。另外也要遵循 GDPR等相关法律法规的要求妥善保管好用户的个人信息资料[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值