membership.controller.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { ApiTags } from '@nestjs/swagger'
  2. import { Public } from '../auth/public.decorator'
  3. import { MembershipService } from './membership.service'
  4. import {
  5. BadRequestException,
  6. Body,
  7. Controller,
  8. Get,
  9. NotImplementedException,
  10. Post,
  11. Query,
  12. Render,
  13. Req
  14. } from '@nestjs/common'
  15. import { RenewDto } from './dto/renew.dto'
  16. import { WeixinService } from '../weixin/weixin.service'
  17. @ApiTags('membership')
  18. @Controller('/membership')
  19. export class MembershipController {
  20. constructor(private readonly membershipService: MembershipService, private readonly weixinService: WeixinService) {}
  21. @Get('/get')
  22. async getMembership(@Req() req) {
  23. return this.membershipService.getMembership(req.user.id)
  24. }
  25. @Post('/renew')
  26. async renewMembership(@Req() req, @Body() body: RenewDto) {
  27. if (body.type === 'JSAPI') {
  28. if (!body.openid) {
  29. throw new BadRequestException('openid is required')
  30. }
  31. return await this.membershipService.combinedJsapi(req.user.id, body.planId, body.openid)
  32. } else {
  33. throw new NotImplementedException()
  34. }
  35. }
  36. @Public()
  37. @Get('/plans')
  38. async getPlans() {
  39. return await this.membershipService.getPlans()
  40. }
  41. @Public()
  42. @Get('/h5pay')
  43. @Render('h5pay')
  44. async h5pay(@Query() { code, userId, planId }) {
  45. // return { success: true, openid: '123', errorCode: 0, message: '', jsapiData: JSON.stringify({aaa:111,bbb:{ccc:"kdjlfksjdfkls"}}), price: `123` }
  46. if (!code) {
  47. return {
  48. success: false,
  49. message: '缺少code',
  50. errorCode: 1,
  51. jsapiData: '{}'
  52. }
  53. }
  54. if (!userId) {
  55. return {
  56. success: false,
  57. message: '缺少userId',
  58. errorCode: 2,
  59. jsapiData: '{}'
  60. }
  61. }
  62. if (!planId) {
  63. return {
  64. success: false,
  65. message: '缺少planId',
  66. errorCode: 3,
  67. jsapiData: '{}'
  68. }
  69. }
  70. const plans = await this.membershipService.getPlans()
  71. const plan = plans.find((p) => p.id == planId)
  72. if (!plan) {
  73. return {
  74. success: false,
  75. message: 'planId无效',
  76. errorCode: 4,
  77. jsapiData: '{}'
  78. }
  79. }
  80. const openid = await this.weixinService.code2oenId(code)
  81. const jsapiData = await this.membershipService.combinedJsapi(userId, planId, openid)
  82. return { success: true, openid, errorCode: 0, message: '', jsapiData: JSON.stringify(jsapiData), price: `${plan.price}` }
  83. }
  84. }