miniProgram.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. import third from '@/sheep/api/third';
  2. import $store from '@/sheep/store';
  3. import AuthUtil from '@/sheep/api/member/auth';
  4. const socialType = 34; // 社交类型 - 微信小程序
  5. let subscribeEventList = [];
  6. // 加载微信小程序
  7. function load() {
  8. checkUpdate();
  9. getSubscribeTemplate();
  10. }
  11. // 微信小程序静默授权登陆
  12. const login = async () => {
  13. return new Promise(async (resolve, reject) => {
  14. // 1. 获得微信 code
  15. const codeResult = await uni.login();
  16. if (codeResult.errMsg !== 'login:ok') {
  17. return resolve(false);
  18. }
  19. // 2. 社交登录
  20. const loginResult = await AuthUtil.socialLogin(socialType, codeResult.code, 'default');
  21. debugger
  22. if (loginResult.code === 0) {
  23. setOpenid(loginResult.data.openid);
  24. return resolve(true);
  25. } else {
  26. return resolve(false);
  27. }
  28. });
  29. };
  30. // 微信小程序手机号授权登陆
  31. const mobileLogin = async (e) => {
  32. return new Promise(async (resolve, reject) => {
  33. console.log(e.errMsg)
  34. if (e.errMsg !== 'getPhoneNumber:ok') {
  35. return resolve(false);
  36. }
  37. // 1. 获得微信 code
  38. const codeResult = await uni.login();
  39. if (codeResult.errMsg !== 'login:ok') {
  40. return resolve(false);
  41. }
  42. // 2. 一键登录
  43. debugger
  44. const loginResult = await AuthUtil.weixinMiniAppLogin(e.code, codeResult.code, 'default');
  45. if (loginResult.code === 0) {
  46. setOpenid(loginResult.data.openid);
  47. return resolve(true);
  48. } else {
  49. return resolve(false);
  50. }
  51. // TODO 芋艿:shareInfo: uni.getStorageSync('shareLog') || {},
  52. });
  53. };
  54. // 微信小程序绑定
  55. const bind = () => {
  56. return new Promise(async (resolve, reject) => {
  57. const loginRes = await third.wechat.bind({
  58. platform: 'miniProgram',
  59. payload: encodeURIComponent(
  60. JSON.stringify({
  61. sessionId: uni.getStorageSync('sessionId'),
  62. }),
  63. ),
  64. });
  65. if (loginRes.error === -1) {
  66. getSessionId(false);
  67. } else if (loginRes.error === 0) {
  68. resolve(true);
  69. } else {
  70. reject(false);
  71. }
  72. });
  73. };
  74. // 微信小程序解除绑定
  75. const unbind = async () => {
  76. const { error } = await third.wechat.unbind({
  77. platform: 'miniProgram',
  78. });
  79. return !error;
  80. };
  81. // 小程序更新
  82. const checkUpdate = async (silence = true) => {
  83. if (uni.canIUse('getUpdateManager')) {
  84. const updateManager = uni.getUpdateManager();
  85. updateManager.onCheckForUpdate(function (res) {
  86. // 请求完新版本信息的回调
  87. if (res.hasUpdate) {
  88. updateManager.onUpdateReady(function () {
  89. uni.showModal({
  90. title: '更新提示',
  91. content: '新版本已经准备好,是否重启应用?',
  92. success: function (res) {
  93. if (res.confirm) {
  94. // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
  95. updateManager.applyUpdate();
  96. }
  97. },
  98. });
  99. });
  100. updateManager.onUpdateFailed(function () {
  101. // 新的版本下载失败
  102. // uni.showModal({
  103. // title: '已经有新版本了哟~',
  104. // content: '新版本已经上线啦,请您删除当前小程序,重新搜索打开~',
  105. // });
  106. });
  107. } else {
  108. if (!silence) {
  109. uni.showModal({
  110. title: '当前为最新版本',
  111. showCancel: false,
  112. });
  113. }
  114. }
  115. });
  116. }
  117. };
  118. // 绑定用户手机号
  119. const bindUserPhoneNumber = (e) => {
  120. return new Promise(async (resolve, reject) => {
  121. const { error } = await third.wechat.bindUserPhoneNumber({
  122. platform: 'miniProgram',
  123. payload: encodeURIComponent(
  124. JSON.stringify({
  125. sessionId: uni.getStorageSync('sessionId'),
  126. iv: e.iv,
  127. encryptedData: e.encryptedData,
  128. code: e.code,
  129. }),
  130. ),
  131. });
  132. if (error === 0) {
  133. resolve(true);
  134. }
  135. resolve(false);
  136. });
  137. };
  138. // 获取订阅消息模板
  139. async function getSubscribeTemplate() {
  140. const { error, data } = await third.wechat.subscribeTemplate();
  141. if (error === 0) {
  142. subscribeEventList = data;
  143. }
  144. }
  145. // 订阅消息
  146. function subscribeMessage(event) {
  147. let tmplIds = [];
  148. if (typeof event === 'string') {
  149. tmplIds.push(subscribeEventList[event]);
  150. }
  151. if (typeof event === 'object') {
  152. event.forEach((item) => {
  153. if (typeof subscribeEventList[item] !== 'undefined') tmplIds.push(subscribeEventList[item]);
  154. });
  155. }
  156. if (tmplIds.length === 0) return;
  157. uni.requestSubscribeMessage({
  158. tmplIds,
  159. fail: (err) => {
  160. console.log(err);
  161. },
  162. });
  163. }
  164. // 设置 openid 到本地存储,目前只有 pay 支付时会使用
  165. function setOpenid(openid) {
  166. uni.setStorageSync('openid', openid);
  167. }
  168. export default {
  169. load,
  170. login,
  171. bind,
  172. unbind,
  173. checkUpdate,
  174. bindUserPhoneNumber,
  175. mobileLogin,
  176. subscribeMessage,
  177. };