Java后端小程序微信登录怎么写

Java后端小程序微信登录怎么写,第1张

其实还蛮简单的,可以说一搜一大把,下面说下两种方式。

自行开发

主要就是通过小程序端直接请求登录获取到code(登录凭证)、如果需要获取用户手机号则需要再次授权需要iv和encryptedData,注意这里授权两次,也可以作为一次处理。

(1) 后端接收到小程序端请求的code,进行解密,可以参考微信小程序开发文档,拿到openId和session_key,这一步如果是已经注册的用户可以直接将后台分配的token一起组成对象存储到redis中,期限7-30天皆可,先从redis判定这个openId是否已经解析过且已存储为正式用户,是则直接返回系统的登录凭证完成登录。如果不是就需要走第二步。

(2)通过iv和encryptedData解析获取用户的手机号,完成解析后将用户信息存储,并一样存储到数据库和redis中,返回凭证。

2 使用已经集成好的sdk,使用maven项目直接引入对象的jar即可。

举个栗子 weixin-java-miniapp 可以看下对应的文档说明,使用已经集成好的方法即可。

微信小程序启动进行自动登录问题,偶尔提示code过期,是由于onLaunch启动进行自动登录时,code提交到服务端,还未返回结果,页面page上执行onload请求部分需要登录的接口--由于此时还未返回登录信息,--认为当前未登录--跳转到登录页,登录界面服务端返回自动登录用户信息,此时登录界面用户点击登录按钮,提示code已被使用,无法在进行登录 *** 作,原理上就是onLaunch未执行完就执行了page--onload导致出现问题,解决办法,控制执行完onLaunch再去执行page--onload,有以下3中方法:

解决办法

定义回调函数, onload里获取不到东西就一直获取,不执行下一步 *** 作,直到获取到appjs的数据才继续执行。若login返回为空,则给appjs注册一个loginSuccessCallback回调,这个回调方法的执行时机,就是appjs中的异步请求完毕

把 appjs 中的 onLaunch 中方法拿到 indexjs 文件中,按照自己的逻辑写

使用promise

1

2

3

微信小程序的登陆一般都是写在appjs当中,具体流程如下

1、用户通过login()方法获取code,然后把code传给开发后台,后台通过code 以及appid以及密钥获取openid和sessionkey 进行登陆,然后返回一个token给前端

2、前端拿到token之后存储到globalData里的变量当中,这样其他页面就是可以同过var app=getapp();appglobalData调用token,但是全局变量会随之小程序关闭,就会清除变量,所以我们要将token存到缓存当中,

        ① 在onLaunch中token的具体流程是

在小程序中,不允许直接d出用户授权的选择框,所以需要开发人员在界面上来设置提示信息,诱导用户点击,然后完成用户数据的录入和存取。在开发的过程中,某些请求是依托用户登录之后获取到的openId才能继续执行的,所以在页面上,某些数据渲染之前需要判断用户是否登陆,如若没有登录,怎样设计更好的交互来让用户登录。

使用小程序时,首先会进入到appjs这个文件中,这个文件里包含了俩个方法,一个是wxlogin(),另一个是wxgetSetting(),wxlogin()的目的是为了在用户登陆之后获取到一个对应的 code 值,然后通过这个值去自己的后台换取一个openId;wxgetSetting()第一是为了判断用户的授权范围,另一个是获取对应权限内的信息,比如说,用户授权小程序可以使用自己的基本信息,就可以在这个方法中获取到用户的头像、微信名、微信设置的城市这些字段,这就是一些需要掌握的基本流程,具体怎么实现登录呢?

在小程序中,官方给出了一种解决方案-button按钮:

在这个按钮中,有几个属性:

●  type :按钮的类型,可以设置为primary,背景色为绿色

●  wx:if :显示条件,内容分别为hasUserInfo和canIUse俩个字段,同时为真即可显示(俩个字段均需要在data中初始化赋值)

●  open-type :按钮的功能类型,getUserInfo是为了获取基本信息(也可以设置为其他→getPhoneNumber:获取用户手机号)

●  bindgetuserinfo :绑定的点击事件。在js中写对应的逻辑

在用户点击按钮之后,会出现一个d窗,确定用户是否授权 :

当用户点击允许之后,进入我们绑定的getUserInfo函数中:

在执行逻辑中,首先通过wxlogin()方法获取到用户对应的openId,方便后续的 *** 作,然后再通过wxgetUserInfo()来获取到用户的基本信息,发送请求,将基本信息入库存储,或者展示到页面上,就完成了登录流程。

1在登陆中可能会涉及到多个页面登陆成功之后的状态同步,可以通过 appgloableData 来实现,在全局对象中设置一个字段,然后不论在哪个页面实现了登录,都可以通过全局对象来完成更新。

2在 获取用户信息 的时候,有时候需要获取的是 中文类型 的数据,可以在 wxgetSetting() 的请求体中加一个 lang:'zh_CN'。 这样获取到的数据就是中文格式的了

微信小程序使用手机号第一次登录code失效,导致后端解密失效

官方文档

解决办法

将wxlogin 提取出来,先一步执行,防止登录态刷新,

然后获取手机号的方法进行登录

前几天在社区看到有人问 微信小程序怎么进行接口自动化 ,所以想把自己如何进行微信小程序接口自动化的方法分享下。

>

微信小程序手机号解密步骤

一、通过getPhoneNumber用户授权获取获取加密后的手机号信息

<template>

<view class="content">

<button class="login-btn btn2" open-type="getPhoneNumber"

@getphonenumber="getPhoneNumber">手机号快捷登录</button>

</view>

</template>

引用WXBizDataCryptjs

var WXBizDataCrypt = require('@/pages/index/WXBizDataCryptjs')

二、解密前先调用wxlogin,获取code发送后台返回sessionkey

getPhoneNumber(e) {

consolelog('e',e)

var pc = new WXBizDataCrypt('appid',thissessionKey)

var data = pcdecryptData(edetailencryptedData,edetailiv)

consolelog('解密后 data:',pc)

},

//WXBizDataCryptjs

记录一下小程序关联服务号的消息推送功能。

准备工作:

1、获取小程序的appid与appsecret(小程序后台获取)

2、获取服务号的appid与appsecret(服务号后台获取)

3、小程序与服务号绑定在同一个微信开放平台

注意:小程序、服务号、微信开放平台都要认证!!!都要认证!!!都要认证!!!

接下来进入正题。

第一步:获取服务号的access_token

直接通过官方给的接口获取。这里有两个参数,都可以直接获取到

第二步:获取已关注服务号的所有用户的openid

还是通过官方提供的网址获取openid,这里需要一个参数access_token,已从上一步获取到了

第三步:获取已关注用户的用户信息

这一步可获取用户的详细信息,包括昵称、头像、地理位置、unionid等。根据官方网址需要两个参数access_token与openid通过上面两部均已取得。这里后台可以生成一张表用于存储这些数据。

第四步:小程序登录时获取用户的unionid

(1)用户登录小程序时,通过wxlogin()获取code

(2)通过微信官方网址获取unionid,需要的参数为code、appid、appsecret

第五步:服务号的模板消息推送

(1)当服务号与小程序绑定在同一个开放平台时,他们的unionid是一样的,所以我们可以通过unionid这个中间量来进行数据的查找

(2)通过第四步获取的unionid,我们可以查找到当前登录小程序的用户他的服务号的openid。

(3)需要的两个参数都获取到了,我们就可以推送消息模板啦,接下来按照官方的教程 *** 作就行了。

(4)如果想要一次推送给多人可以把接收人的openid存到一个数组中,然后加个循环就行了。

总结:用户必须关注服务号,否则不发收到推送消息。

以上就是关于Java后端小程序微信登录怎么写全部的内容,包括:Java后端小程序微信登录怎么写、微信小程序启动进行自动登录问题,偶尔提示code过期、微信小程序wx.login()登陆流程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9326841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存