authen.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import settings from '../settings'
  2. import { getAuthen } from '../assets/util'
  3. import moment from 'moment'
  4. const noncestr = Math.random().toString(36).substring(2);
  5. const timestamp = +moment.utc();
  6. // 带Origin后缀的通过getter获取
  7. export const state = () => ({
  8. openIdOrigin: "",
  9. accessTokenOrigin: "",
  10. unionIdOrigin: "",
  11. userInfo: {},
  12. stationIdOrigin: "",
  13. appIdOrigin: "",
  14. noncestr,
  15. timestamp,
  16. signature:"",
  17. })
  18. export const getters = {
  19. openId: (state) => {
  20. if (!state.openIdOrigin) {
  21. getAuthen()
  22. }
  23. return state.openIdOrigin
  24. },
  25. accessToken: (state) => {
  26. if (!state.accessTokenOrigin) {
  27. getAuthen()
  28. }
  29. return state.accessToken
  30. },
  31. stationId: (state) => {
  32. if (!state.stationIdOrigin) {
  33. getAuthen()
  34. }
  35. return state.stationIdOrigin
  36. },
  37. appId: (state) => {
  38. if (!state.appIdOrigin) {
  39. getAuthen()
  40. }
  41. return state.appIdOrigin
  42. },
  43. unionId: (state) => {
  44. if (!state.unionIdOrigin) {
  45. getAuthen()
  46. }
  47. return state.unionIdOrigin
  48. },
  49. userInfo: (state) => state.userInfo,
  50. }
  51. export const mutations = {
  52. setOpenId(state, openId) {
  53. state.openIdOrigin = openId
  54. },
  55. setAccessToken(state, accessToken) {
  56. state.accessTokenOrigin = accessToken
  57. },
  58. setUnionId(state, unionId) {
  59. state.unionIdOrigin = unionId
  60. },
  61. setUserInfo(state, userInfo) {
  62. state.userInfo = userInfo
  63. },
  64. setSignature(state, signature) {
  65. state.signature = signature
  66. },
  67. setStationId(state,stationId){
  68. state.stationIdOrigin = stationId
  69. },
  70. setAppId(state, appId) {
  71. state.appIdOrigin = appId
  72. }
  73. }
  74. export const actions = {
  75. async login({ commit, state, getters }, code) {
  76. const gzhAuthenRes = await this.$axios.$get("/getGzhAuthorizeInfo", {
  77. params: {
  78. code,
  79. stationId: getters.stationId,
  80. },
  81. })
  82. if (gzhAuthenRes.retCode !== 0) { return Promise.reject("拉取基础id失败") }
  83. const openId = gzhAuthenRes.data.openid;
  84. const accessToken = gzhAuthenRes.data.access_token;
  85. const unionId = gzhAuthenRes.data.unionid;
  86. commit("setOpenId", openId)
  87. commit("setAccessToken", accessToken)
  88. commit("setUnionId", unionId)
  89. const getUserInfoRes = await this.$axios.$get("/getGzhUserInfo", {
  90. params: {
  91. openId: openId,
  92. stationId: getters.stationId
  93. }
  94. })
  95. if (getUserInfoRes.retCode !== 0) { return Promise.reject("拉取用户信息失败") }
  96. commit("setUserInfo", getUserInfoRes.data)
  97. const saveUserInfoRes = await this.$axios.$post("/addAppUserInfo", {
  98. userType: "1",
  99. openId: openId,
  100. unionId: unionId,
  101. stationId: getters.stationId, //油站Id
  102. blogNickName: getUserInfoRes.data.nickname,
  103. sexFlag: getUserInfoRes.data.sex === 1 ? 'M' : 'F',
  104. blogProfilePhoto: getUserInfoRes.data.headimgurl
  105. })
  106. if (saveUserInfoRes.retCode !== 0) { return Promise.reject("存取用户信息失败") }
  107. return Promise.resolve("用户登录成功")
  108. },
  109. async getSdkConfig({commit,state, getters},jsApiList){
  110. const sdkSignRes = await this.$axios.$get("/getSignature",{
  111. params:{
  112. noncestr:state.noncestr,
  113. timestamp:state.timestamp,
  114. url:window.location.href.replace(/#(\w|\W){0,}/g, ''),
  115. stationId:getters.stationId
  116. }
  117. })
  118. if(sdkSignRes.retCode !== 0){Promise.reject("获取Sdk签名错误")}
  119. commit("setSignature", sdkSignRes.data)
  120. return Promise.resolve({
  121. debug: settings.debug, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  122. appId: getters.appId, // 必填,公众号的唯一标识
  123. timestamp: state.timestamp, // 必填,生成签名的时间戳
  124. nonceStr: state.noncestr, // 必填,生成签名的随机串
  125. signature:sdkSignRes.data,
  126. jsApiList // 必填,需要使用的JS接口列表
  127. })
  128. },
  129. async getAppId({commit,state, getters},stationId){
  130. const appIdRes = await this.$axios.$get("/getStationGzhAppId",{
  131. params:{
  132. stationId:stationId
  133. }
  134. })
  135. if(appIdRes.retCode !== 0){return Promise.reject("获取appid失败")}
  136. commit("setStationId",stationId)
  137. commit("setAppId", appIdRes.data.appId)
  138. return Promise.resolve({
  139. stationId,
  140. appId:appIdRes.data.appId
  141. })
  142. }
  143. }