index.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. 'use strict';
  2. const uniADConfig = require('uni-config-center')({
  3. pluginId: 'uni-ad'
  4. }).config()
  5. const signIn = require('sign-in')
  6. let ip = null
  7. async function nextFn(data) {
  8. //写自己的业务逻辑
  9. switch (data.extra) {
  10. case "uniSignIn": //签到
  11. let {
  12. user_id
  13. } = data;
  14. await signIn({
  15. user_id,
  16. ip
  17. })
  18. break;
  19. default:
  20. break;
  21. }
  22. return {
  23. "isValid": true //如果不返回,广点通会2次调用本云函数
  24. }
  25. }
  26. const crypto = require('crypto');
  27. const db = uniCloud.database();
  28. exports.main = async (event, context) => {
  29. ip = context.CLIENTIP;
  30. //event为客户端上传的参数
  31. console.log('event : ', event);
  32. const {
  33. path,
  34. queryStringParameters
  35. } = event;
  36. const data = {
  37. adpid: event.adpid,
  38. platform: event.platform,
  39. provider: event.provider,
  40. trans_id: event.trans_id,
  41. sign: event.sign,
  42. user_id: event.user_id,
  43. extra: event.extra,
  44. }
  45. // 注意::必须验签请求来源
  46. const trans_id = event.trans_id;
  47. //去uni-config-center通过adpid获取secret
  48. const secret = uniADConfig[event.adpid]
  49. const sign2 = crypto.createHash('sha256').update(`${secret}:${trans_id}`).digest('hex');
  50. if (event.sign !== sign2) {
  51. console.log('验签失败');
  52. return null;
  53. }
  54. //自己的逻辑
  55. try {
  56. return await nextFn(data)
  57. } catch (e) {
  58. console.error(e)
  59. return {
  60. "isValid": false
  61. }
  62. }
  63. };