MemberAppWechatService.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 17/2/23
  6. * Time: 上午11:20
  7. */
  8. namespace app\frontend\modules\member\services;
  9. use app\frontend\modules\member\services\MemberService;
  10. class MemberAppWechatService extends MemberService
  11. {
  12. const LOGIN_TYPE = 3;
  13. public function __construct()
  14. {}
  15. public function login()
  16. {
  17. $uniacid = \YunShop::app()->uniacid;
  18. $appId = \YunShop::app()->account['key'];
  19. $appSecret = \YunShop::app()->account['secret'];
  20. $code = \YunShop::request()->code;
  21. $tokenurl = $this->_getTokenUrl($appId, $appSecret, $code);
  22. if ($this->isLogged()) {
  23. return show_json(1, array('member_id'=> session('member_id')));
  24. }
  25. if (!empty($code)) {
  26. $resp = @\Curl::to($tokenurl)->get();
  27. $token = @json_decode($resp['content'], true);
  28. if (!empty($token) && is_array($token) && $token['errmsg'] == 'invalid code') {
  29. return show_json(0, array('msg'=>'请求错误'));
  30. }
  31. $userinfo_url = $this->_getUserInfoUrl($token['accesstoken'], $token['openid']);
  32. $user_info = @\Curl::to($userinfo_url)->get();
  33. if (is_array($user_info) && !empty($user_info['unionid'])) {
  34. $UnionidInfo = MemberUniqueModel::getUnionidInfo($uniacid, $user_info['unionid']);
  35. if ($UnionidInfo['unionid']) {
  36. $types = explode('|',$UnionidInfo['type']);
  37. $member_id = $UnionidInfo['member_id'];
  38. if (!in_array(self::LOGIN_TYPE, $types)) {
  39. //更新ims_yz_member_unique表
  40. MemberUniqueModel::updateData(array(
  41. 'unique_id'=>$UnionidInfo['unique_id'],
  42. 'type' => $UnionidInfo['type'] . '|' . self::LOGIN_TYPE
  43. ));
  44. //添加yz_member_app_wechat表
  45. MemberWechatModel::insertData(array(
  46. 'uniacid' => $uniacid,
  47. 'member_id' => $member_id,
  48. 'openid' => $user_info['openid'],
  49. 'nickname' => $user_info['nickname'],
  50. 'avatar' => $user_info['headimgurl'],
  51. 'gender' => $user_info['sex'],
  52. 'nationality' => $user_info['country'],
  53. 'resideprovince' => $user_info['province'] . '省',
  54. 'residecity' => $user_info['city'] . '市',
  55. 'created_at' => time()
  56. ));
  57. }
  58. } else {
  59. $member_id = McMappingFansModel::getUId($uniacid, $token['openid']);
  60. //添加ims_mc_member表
  61. $member_id = MemberModel::insertData(array(
  62. 'uniacid' => $uniacid,
  63. 'groupid' => $user_info['unionid'],
  64. 'createtime' => TIMESTAMP,
  65. 'nickname' => $user_info['nickname'],
  66. 'avatar' => $user_info['headimgurl'],
  67. 'gender' => $user_info['sex'],
  68. 'nationality' => $user_info['country'],
  69. 'resideprovince' => $user_info['province'] . '省',
  70. 'residecity' => $user_info['city'] . '市'
  71. ));
  72. //添加ims_yz_member_unique表
  73. MemberUniqueModel::insertData(array(
  74. 'uniacid' => $uniacid,
  75. 'unionid' => $token['unionid'],
  76. 'member_id' => $member_id,
  77. 'type' => self::LOGIN_TYPE
  78. ));
  79. //添加yz_member_app_wechat表
  80. MemberWechatModel::insertData(array(
  81. 'uniacid' => $uniacid,
  82. 'member_id' => $member_id,
  83. 'openid' => $user_info['openid'],
  84. 'nickname' => $user_info['nickname'],
  85. 'avatar' => $user_info['headimgurl'],
  86. 'gender' => $user_info['sex'],
  87. 'nationality' => $user_info['country'],
  88. 'resideprovince' => $user_info['province'] . '省',
  89. 'residecity' => $user_info['city'] . '市',
  90. 'created_at' => time()
  91. ));
  92. session()->put('member_id',$member_id);
  93. }
  94. } else {
  95. show_json(0, array('msg'=> '请求错误'));
  96. }
  97. } else {
  98. show_json(0, array('msg'=> '请求错误'));
  99. }
  100. show_json(1, array('member_id', session('member_id')));
  101. }
  102. private function _getTokenUrl($appId, $appSecret, $code)
  103. {
  104. return "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appId}&secret={$appSecret}&code={$code}&grant_type=authorization_code";
  105. }
  106. private function _getUserInfoUrl($accesstoken, $openid)
  107. {
  108. return "https://api.weixin.qq.com/sns/userinfo?access_token={$accesstoken}&openid={$openid}&lang=zh_CN";
  109. }
  110. /**
  111. * 验证登录状态
  112. *
  113. * @return bool
  114. */
  115. public function checkLogged($login = null)
  116. {
  117. return MemberService::isLogged();
  118. }
  119. }