OfficialAccount.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace addons\shopro\service\third\wechat;
  3. use addons\shopro\facade\Wechat;
  4. class OfficialAccount
  5. {
  6. public $wechat;
  7. protected $request;
  8. protected $payload;
  9. public function __construct($payload)
  10. {
  11. $this->payload = $payload;
  12. $this->request = request();
  13. $this->wechat = Wechat::officialAccount();
  14. }
  15. public function login()
  16. {
  17. $code = $this->request->get('code');
  18. if (empty($code)) {
  19. error_stop('缺少code参数');
  20. }
  21. $decryptData = $this->wechat->oauth->user()->getOriginal();
  22. $wechatUser = [
  23. 'openid' => $decryptData['openid'],
  24. 'unionid' => $decryptData['unionid'] ?? '',
  25. 'avatar' => $decryptData['headimgurl'],
  26. 'nickname' => $decryptData['nickname'],
  27. ];
  28. return $wechatUser;
  29. }
  30. public function bind()
  31. {
  32. return $this->login();
  33. }
  34. /**
  35. * 获取网页登录地址redirect+返回code
  36. *
  37. * @return string
  38. */
  39. public function oauthLogin()
  40. {
  41. // 返回前端
  42. if (!empty($this->request->param('code'))) {
  43. if($this->payload['event'] === 'bind') {
  44. $query['bind_code'] = $this->request->param('code');
  45. }else {
  46. $query['login_code'] = $this->request->param('code');
  47. }
  48. return [
  49. 'redirect_url' => $this->payload['page'] . '?' . http_build_query($query)
  50. ];
  51. } else {
  52. $query = [
  53. 'platform' => 'officialAccount',
  54. 'payload' => urlencode(json_encode($this->payload))
  55. ];
  56. $loginUrl = $this->request->domain() . '/addons/shopro/third.wechat/oauthLogin?' . http_build_query($query);
  57. return [
  58. 'login_url' => $this->wechat->oauth->scopes(['snsapi_userinfo'])->redirect($loginUrl)->getTargetUrl()
  59. ];
  60. }
  61. }
  62. public function jssdk($APIs)
  63. {
  64. $this->wechat->jssdk->setUrl($this->payload['url']);
  65. return $this->wechat->jssdk->buildConfig($APIs, false, false, false);
  66. }
  67. }