login-by-alipay.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const {
  2. initAlipay
  3. } = require('../../lib/third-party/index')
  4. const {
  5. ERROR
  6. } = require('../../common/error')
  7. const {
  8. preUnifiedLogin,
  9. postUnifiedLogin
  10. } = require('../../lib/utils/unified-login')
  11. const {
  12. LOG_TYPE
  13. } = require('../../common/constants')
  14. /**
  15. * 支付宝登录
  16. * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#login-by-alipay
  17. * @param {Object} params
  18. * @param {String} params.code 支付宝小程序客户端登录返回的code
  19. * @param {String} params.inviteCode 邀请码
  20. * @returns
  21. */
  22. module.exports = async function (params = {}) {
  23. const schema = {
  24. code: 'string',
  25. inviteCode: {
  26. type: 'string',
  27. required: false
  28. }
  29. }
  30. this.middleware.validate(params, schema)
  31. const {
  32. code,
  33. inviteCode
  34. } = params
  35. const alipayApi = initAlipay.call(this)
  36. let getAlipayAccountResult
  37. try {
  38. getAlipayAccountResult = await alipayApi.code2Session(code)
  39. } catch (error) {
  40. console.error(error)
  41. await this.middleware.uniIdLog({
  42. success: false,
  43. type: LOG_TYPE.LOGIN
  44. })
  45. throw {
  46. errCode: ERROR.GET_THIRD_PARTY_ACCOUNT_FAILED
  47. }
  48. }
  49. const {
  50. openid
  51. } = getAlipayAccountResult
  52. const {
  53. type,
  54. user
  55. } = await preUnifiedLogin.call(this, {
  56. user: {
  57. ali_openid: openid
  58. }
  59. })
  60. return postUnifiedLogin.call(this, {
  61. user,
  62. extraData: {},
  63. isThirdParty: true,
  64. type,
  65. inviteCode
  66. })
  67. }