作者 chencheng

0529-test-4

@@ -60,8 +60,54 @@ class Wechat extends Api @@ -60,8 +60,54 @@ class Wechat extends Api
60 $user = $app->oauth->user(); 60 $user = $app->oauth->user();
61 61
62 var_dump($user);die; 62 var_dump($user);die;
63 - /*  
64 - $user的数据结构 63 + /*
  64 + $user的数据结构 snsapi_userinfo 授权获取
  65 + object(Overtrue\Socialite\User)#143 (1) {
  66 + ["attributes":protected]=>
  67 + array(10) {
  68 + ["id"]=>
  69 + string(28) "oFycus-NxBBtBjfyd_xClnPrdaok"
  70 + ["name"]=>
  71 + string(23) "app.微信开发 陈工"
  72 + ["nickname"]=>
  73 + string(23) "app.微信开发 陈工"
  74 + ["avatar"]=>
  75 + string(134) "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJFicTnPRiaic62m4HY4YxrHPRKa92HQrvPOcYRAJSKLRYwCibFWuJCXUCoib9QpE2rKbs4WVVoXVDticdQ/132"
  76 + ["email"]=>
  77 + NULL
  78 + ["original"]=>
  79 + array(9) {
  80 + ["openid"]=>
  81 + string(28) "oFycus-NxBBtBjfyd_xClnPrdaok"
  82 + ["nickname"]=>
  83 + string(23) "app.微信开发 陈工"
  84 + ["sex"]=>
  85 + int(0)
  86 + ["language"]=>
  87 + string(0) ""
  88 + ["city"]=>
  89 + string(0) ""
  90 + ["province"]=>
  91 + string(0) ""
  92 + ["country"]=>
  93 + string(0) ""
  94 + ["headimgurl"]=>
  95 + string(134) "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJFicTnPRiaic62m4HY4YxrHPRKa92HQrvPOcYRAJSKLRYwCibFWuJCXUCoib9QpE2rKbs4WVVoXVDticdQ/132"
  96 + ["privilege"]=>
  97 + array(0) {
  98 + }
  99 + }
  100 + ["token"]=>
  101 + string(110) "69_a0ecHFb5w81Cen3R11WfYMO2nD88jiyhsLC7jfqmCYC71maesd2OaDEvH4LaQAZsYfejWGdGYEGRzKjCQu8kX7FBZc4_nJ6so3Cxn9E_mt0"
  102 + ["access_token"]=>
  103 + string(110) "69_a0ecHFb5w81Cen3R11WfYMO2nD88jiyhsLC7jfqmCYC71maesd2OaDEvH4LaQAZsYfejWGdGYEGRzKjCQu8kX7FBZc4_nJ6so3Cxn9E_mt0"
  104 + ["refresh_token"]=>
  105 + string(110) "69_tFnfQInYcufQQoK5DpstHgucGKGnZjA_Jido5TLyIR1ye3GNYnZS0eJLv5kJ7zJuoJiHD10mzH1wrLicGaFdet_NYkGTAhVZ17QIPMzKkr4"
  106 + ["provider"]=>
  107 + string(6) "WeChat"
  108 + }
  109 + }
  110 + $user的数据结构 静默获取 snsapi_base
65 { 111 {
66 "id": "oFycus-NxBBtBjfyd_xClnPrdaok", 112 "id": "oFycus-NxBBtBjfyd_xClnPrdaok",
67 "name": null, 113 "name": null,
@@ -103,22 +149,119 @@ class Wechat extends Api @@ -103,22 +149,119 @@ class Wechat extends Api
103 */ 149 */
104 150
105 public function get_user_info_by_code (){ 151 public function get_user_info_by_code (){
  152 + $user_id = 0;
106 try{ 153 try{
107 $app = WehcatModule::getInstance()->initWechat(); 154 $app = WehcatModule::getInstance()->initWechat();
108 $oauth = $app->oauth; 155 $oauth = $app->oauth;
109 // 获取 OAuth 授权结果用户信息 156 // 获取 OAuth 授权结果用户信息
110 $user = $oauth->user(); 157 $user = $oauth->user();
111 $openid = $user->id; 158 $openid = $user->id;
112 - $user_info = $app->user->get($openid);  
113 - dump($user_info);die; 159 + //如果是授权获取 则可以有
  160 + $nickname = $user->nickname;
  161 + $avatar = $user->avatar;
  162 + //更新user表信息
  163 + $save['nickname'] = $nickname;
  164 + $save['openid'] = $openid;
  165 + $save['avatar'] = $avatar;
  166 + $save['jointime'] = $save['prevtime'] = $save['logintime'] = time();
  167 + $save['loginip'] = $save['joinip'] = request()->ip();
  168 + $w['openid'] = $openid;
  169 + $user = Db::name('user')->where($w)->find();
  170 + //存在更新否则新增
  171 + if(empty($user)){
  172 + Db::name('user')->insert($save);
  173 + }else{
  174 + Db::name('user')->where($w)->update($save);
  175 + }
  176 + //注册成功 继续注册分销关系
  177 +
  178 + //设置同域下的登录缓存
  179 + $user = Db::name('user')->where($w)->find();
  180 +
  181 + session("user_id",$user['id']);
  182 + //返回给前端
  183 + $user_id = $user['id'];
114 }catch(\Exception $e){ 184 }catch(\Exception $e){
115 $this->error($e->getMessage()); 185 $this->error($e->getMessage());
116 } 186 }
117 - $this->success('配置获取成功', json_decode($config,true)); 187 + if($user_id !=0){
  188 + $this->success('完成',$user_id);
  189 + }else{
  190 + $this->error('code处理失败');
  191 + }
  192 +
  193 + }
  194 +
  195 + /*
  196 + 3.订单支付 前端请求
  197 + 3.1 入库 订单状态
  198 + 3.2 入库完成 处理支付接口 返回给前端
  199 + wx.chooseWXPay({
  200 + timestamp: <?= $config['timestamp'] ?>,
  201 + nonceStr: '<?= $config['nonceStr'] ?>',
  202 + package: '<?= $config['package'] ?>',
  203 + signType: '<?= $config['signType'] ?>',
  204 + paySign: '<?= $config['paySign'] ?>', // 支付签名
  205 + success: function (res) {
  206 + // 支付成功后的回调函数
  207 + }
  208 + });
  209 + 3.3 回调修改订单状态
  210 + */
  211 + public function prepare_order(){
  212 + $user_id = session('user_id');
  213 + $user_id = 1;
  214 + $userInfo = Db::name('user')->where(['id'=>$user_id])->find();
  215 + //3.1订单入库
  216 +
  217 + //3.2 入库完成 处理支付
  218 + $out_trade_no = "O".time().uniqid();
  219 + $app = WehcatModule::getInstance()->initWechatPay();
  220 + $result = $app->order->unify([
  221 + 'body' => '腾讯充值中心-QQ会员充值',
  222 + 'out_trade_no' => $out_trade_no,
  223 + 'total_fee' => 1,
  224 + 'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
  225 + 'openid' => $userInfo['openid'],
  226 + ]);
  227 + if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
  228 + $prepay_id = $result['prepay_id'];
  229 + $jssdk = $app->jssdk;
  230 + $config = $jssdk->sdkConfig($prepay_id);
  231 + return $this->success('下单成功',$config);
  232 +
  233 + }else{
  234 + return $this->error('下单失败');
  235 + }
  236 +
118 } 237 }
119 238
  239 +
120 /* 240 /*
121 - 3. 241 + 微信支付回调信息
122 */ 242 */
  243 + public function notify(){
  244 + $app = WehcatModule::getInstance()->initWechatPay();
  245 + $response = $app->handlePaidNotify(function($message, $fail){
  246 + // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
  247 + file_put_contents("1_cc.log",json_encode($message),FILE_APPEND);
  248 + $order = $message['out_trade_no'];
  249 + if ($message['return_code'] === 'SUCCESS' && $message['result_code'] === 'SUCCESS') {
  250 +
  251 + } else {
  252 + return $fail('通信失败,请稍后再通知我');
  253 + }
123 254
  255 +
  256 + return true; // 返回处理完成
  257 + });
  258 + $response->send(); // return $response;
  259 + /*
  260 + $xml = file_get_contents("php://input");
  261 + $xmljson= json_encode(simplexml_load_string($xml, 'SimplexmlElement', LIBxml_NOCDATA));//将对象转换个JSON
  262 + file_put_contents("json.txt",$xmljson);
  263 + $xmlarray=json_decode($xmljson,true);//将json转换成数组
  264 + file_put_contents("1_cc.log",json_encode($xmlarray),FILE_APPEND);
  265 + */
  266 + }
124 } 267 }
@@ -44,4 +44,6 @@ return array ( @@ -44,4 +44,6 @@ return array (
44 ), 44 ),
45 'appid' => 'wx1c3cc5b4e2006be2', 45 'appid' => 'wx1c3cc5b4e2006be2',
46 'appsecret' => '643f1b6fdba08a773a7761a1a194a1ad', 46 'appsecret' => '643f1b6fdba08a773a7761a1a194a1ad',
  47 + 'pay_key' => 'e7c30115f2b0fb959977315686b44ce0',
  48 + 'pay_mch_id' => '1609190540',
47 ); 49 );
@@ -18,45 +18,7 @@ class Wechat { @@ -18,45 +18,7 @@ class Wechat {
18 static private $inc = null; 18 static private $inc = null;
19 19
20 function __construct(){ 20 function __construct(){
21 - //self::$appid= config("site.appid");  
22 - //self::$appsecret= config("site.appsecret");  
23 - //测试公众号  
24 - self::$appid= 'wxb9b259e7a17bda27';  
25 - self::$appsecret= '2af20d18bf969d8a26691dfd54cc6380';  
26 - //easyWechat配置  
27 - self::$config = [  
28 - 'app_id' => self::$appid,  
29 - 'secret' => self::$appsecret,  
30 - // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名  
31 - 'response_type' => 'array',  
32 - 'log' => [  
33 - 'default' => 'dev', // 默认使用的 channel,生产环境可以改为下面的 prod  
34 - 'channels' => [  
35 - // 测试环境  
36 - 'dev' => [  
37 - 'driver' => 'single',  
38 - 'path' => '/tmp/easywechat.log',  
39 - 'level' => 'debug',  
40 - ],  
41 - // 生产环境  
42 - 'prod' => [  
43 - 'driver' => 'daily',  
44 - 'path' => '/tmp/easywechat.log',  
45 - 'level' => 'info',  
46 - ],  
47 - ],  
48 - ],  
49 - /**  
50 - * OAuth 配置  
51 - *  
52 - * scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login  
53 - * callback:OAuth授权完成后的回调页地址:需要前端提供完整的url  
54 - */  
55 - 'oauth' => [  
56 - 'scopes' => ['snsapi_base'],  
57 - 'callback' => '/api/oauth_callback.php',  
58 - ],  
59 - ]; 21 +
60 } 22 }
61 23
62 //静态函数 24 //静态函数
@@ -68,9 +30,39 @@ class Wechat { @@ -68,9 +30,39 @@ class Wechat {
68 } 30 }
69 31
70 //初始化 easywechat app 32 //初始化 easywechat app
71 -  
72 static public function initWechat(){ 33 static public function initWechat(){
  34 + $appid= config("site.appid");
  35 + $appsecret= config("site.appsecret");
  36 +
  37 + //easyWechat配置
  38 + $config = [
  39 + 'app_id' => $appid,
  40 + 'secret' => $appsecret,
  41 + // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
  42 + 'response_type' => 'array',
  43 + ];
73 self::$app = Factory::officialAccount(self::$config); 44 self::$app = Factory::officialAccount(self::$config);
74 return self::$app; 45 return self::$app;
75 } 46 }
  47 +
  48 + //初始化 jssdk支付
  49 + static public function initWechatPay(){
  50 + //测试公众号
  51 + $appid= config("site.appid");;
  52 + $mch_id = config("site.pay_mch_id");
  53 + $pay_key = config("site.pay_key");;
  54 + $notify_url = request()->domain().url('api/v1/wechat/notify');
  55 +
  56 + $config = [
  57 + 'app_id' => $appid,
  58 + 'mch_id' => $mch_id,
  59 + 'key' => $pay_key,
  60 + 'cert_path' => '../extend/cert/apiclient_cert.pem', // XXX: 绝对路径!!!!
  61 + 'key_path' => '../extend/cert/apiclient_key.pem', // XXX: 绝对路径!!!!
  62 + 'notify_url' => $notify_url, // 你也可以在下单时单独设置来想覆盖它
  63 +
  64 + ];
  65 + $app = Factory::payment($config);
  66 + return $app;
  67 + }
76 } 68 }