美文网首页
政务微信嵌入网页踩坑

政务微信嵌入网页踩坑

作者: 小俊的世界 | 来源:发表于2021-08-03 19:07 被阅读0次

背景

公司接受到一个项目,需要在政务微信开发一个应用,综合考虑下来,采用嵌入网页的方式。需要解决的最为核心的就是用户认证的问题。

基本信息获取

CorpId获取

从我的单位中直接可以查看到。


image.png

AgentId与Secret获取

进行应用与小程序,点击应用进入,可以查看到。


image.png image.png

政务微信接口调用

前台不能直接调用

前台接口调用会出现跨域问题,使用nginx代理也是不能解决,需要走后台绕一下的,在这里使用的是node(koa)开发的应用。

配置可信域名

image.png image.png

配置工作台网页

image.png

形如:https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&agentid=AGENTID&state=STATE#wechat_redirect

代码展示

后端与政务微信接口通信

node环境准备 node 需要大于7.9 因为会使用到async await
全局安装koa
koa 生成项目
跨域问题解决 安装 koa2-cors

// app.js
const Koa = require('koa')
const app = new Koa()
const views = require('koa-views')
const json = require('koa-json')
const onerror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')
const zwwx = require('./routes/zwwx')
const cors = require('koa2-cors');

app.use(cors({
  origin: '*', // 允许跨域的地址,我的理解类似白名单,*代表全部允许
  exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'], // 暴露header列表
  maxAge: 5, // 每隔5秒发送预检请求,也就是发送两次请求
  credentials: true, // 允许请求携带cookie
  allowMethods: ['OPTIONS', 'GET', 'PUT', 'POST', 'DELETE'], // 请求方式
  allowHeaders: ['Accept', 'Origin', 'Content-type', 'Authorization'],
}))

// error handler
onerror(app)

// middlewares
app.use(bodyparser({
  enableTypes:['json', 'form', 'text']
}))
app.use(json())
app.use(logger())

...

// routes
app.use(zwwx.routes(),zwwx.allowedMethods())
// error-handling
app.on('error', (err, ctx) => {
  console.error('server error', err, ctx)
});

module.exports = app

// zwwx.js
const router = require('koa-router')()
const axios  = require('axios')
const corpid = 'xxx'  // 使用正确的corpid
const corpsecret='xxx' // 使用正确的corpsecret
const getToken =async () =>{
  const res = await axios.get(`http://zwwxuat.shdata.com/cgi-bin/gettoken?corpid=${corpid}&corpsecret=${corpsecret}`)
  if(res.status === 200){
    const data = res.data
    const token = data.access_token
    if(!token) {
      console.log('http://zwwxuat.shdata.com/cgi-bin/gettoken接口未调用成功')
    }else{
      console.log(`token:${token}`)
      return token
    }
  }else{
    console.log('http://zwwxuat.shdata.com/cgi-bin/gettoken接口未调用成功')
  }
}

const getUserInfo = async (token,code)=>{
  const res = await axios.get(`http://zwwxuat.shdata.com/cgi-bin/user/getuserinfo?access_token=${token}&code=${code}`)
  if(res.status === 200){
    const data = res.data
    if(data.errcode){
      console.log(data.errmsg)
    }
    return data
  }else{
    console.log('http://zwwxuat.shdata.com/cgi-bin/user/getuserinfo接口未调用成功')
  }
}
router.prefix('/zwwx')

router.post('/getUserInfo',async(ctx, next )=>{
    const code = ctx.request.body.code
    console.log(ctx.params)
    if(!code){
      console.log('code不存在')
      ctx.body = {
        message:'code不存在'
      } 
      return
    }
    const token = await getToken()
    const userInfo =await getUserInfo(token,code)
    console.log('UserInfo:',userInfo)
    ctx.body = userInfo
})

module.exports = router

前台调用

const baseURL = 'http://127.0.0.1:3000/zwwx'

import axios from 'axios'



function param2Obj(url) {
  const search = url.split('?')[1]
  if (!search) {
    return {}
  }
  return JSON.parse('{"' + decodeURIComponent(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}')
}

export  async function  getUserInfo() {
    const params = param2Obj(window.location.href)
    axios.post(`${baseURL}/getUserInfo`,{code:params.code}).then(res=>{
        alert(JSON.stringify(res))
    })
}

相关文章

  • 政务微信嵌入网页踩坑

    背景 公司接受到一个项目,需要在政务微信开发一个应用,综合考虑下来,采用嵌入网页的方式。需要解决的最为核心的就是用...

  • 微信公众号开发-验证微信服务器,授权登录以及Token管理

    本文基于之前几个项目在部署在微信公众号下的网页应用,以此写下微信公众号开发的步骤以及踩过的坑 申请测试公众号 首先...

  • iOS H5微信支付

    前言 踩了很多坑,记录下吧 这里使用的webView,wk的话类似 H5微信支付可以在网页监听到订单的生成地址和微...

  • H5页面 真机调试(win10)

    做企业微信的网页应用已有一年的时间,期间踩过很多坑,调试问题是最开始跳入的坑。 安卓真机调试 前提:在手机chro...

  • 2021-05-12

    微信分享跳转2次,微信分享跳转微信正在连接,分享微信没反应 这几天搞微信分享,还是有一些坑在里面的,记录踩过的坑;...

  • 微信支付与支付宝支付的那些事(持续更新)

    2017-08-25: 记录下java集成网页微信支付和支付宝支付的处理思路和踩过的坑。 项目架构采用前后端分离的...

  • UniversalLink适配踩坑

    iOS UniversalLink适配踩坑 最近微信OpenSDK升级微信OpenSDK更新要求 以及QQ Ope...

  • 微信网页开发遇到的坑

    微信网页开发遇到的坑 大家好,我是许RR。最近在做一个外包项目,老板要求使用微信网页开发,什么是微信网页开发呢?我...

  • 10003,redirect_uri域名与后台配置不一致

    微信网页授权第一步:用户同意授权,获取code。报出来的10003错误。 困扰了我几个小时,总结下吧。踩了好多坑啊...

  • Swift开发 微信第三方登录

    引言 微信支付和微信第三方登录已经做过好多次了,每次做感觉都有坑,详细记录下,以免下次踩坑,先从微信登录开始吧。 ...

网友评论

      本文标题:政务微信嵌入网页踩坑

      本文链接:https://www.haomeiwen.com/subject/gjbevltx.html