作者 chencheng

0529-test-4

... ... @@ -60,8 +60,54 @@ class Wechat extends Api
$user = $app->oauth->user();
var_dump($user);die;
/*
$user的数据结构
/*
$user的数据结构 snsapi_userinfo 授权获取
object(Overtrue\Socialite\User)#143 (1) {
["attributes":protected]=>
array(10) {
["id"]=>
string(28) "oFycus-NxBBtBjfyd_xClnPrdaok"
["name"]=>
string(23) "app.微信开发 陈工"
["nickname"]=>
string(23) "app.微信开发 陈工"
["avatar"]=>
string(134) "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJFicTnPRiaic62m4HY4YxrHPRKa92HQrvPOcYRAJSKLRYwCibFWuJCXUCoib9QpE2rKbs4WVVoXVDticdQ/132"
["email"]=>
NULL
["original"]=>
array(9) {
["openid"]=>
string(28) "oFycus-NxBBtBjfyd_xClnPrdaok"
["nickname"]=>
string(23) "app.微信开发 陈工"
["sex"]=>
int(0)
["language"]=>
string(0) ""
["city"]=>
string(0) ""
["province"]=>
string(0) ""
["country"]=>
string(0) ""
["headimgurl"]=>
string(134) "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJFicTnPRiaic62m4HY4YxrHPRKa92HQrvPOcYRAJSKLRYwCibFWuJCXUCoib9QpE2rKbs4WVVoXVDticdQ/132"
["privilege"]=>
array(0) {
}
}
["token"]=>
string(110) "69_a0ecHFb5w81Cen3R11WfYMO2nD88jiyhsLC7jfqmCYC71maesd2OaDEvH4LaQAZsYfejWGdGYEGRzKjCQu8kX7FBZc4_nJ6so3Cxn9E_mt0"
["access_token"]=>
string(110) "69_a0ecHFb5w81Cen3R11WfYMO2nD88jiyhsLC7jfqmCYC71maesd2OaDEvH4LaQAZsYfejWGdGYEGRzKjCQu8kX7FBZc4_nJ6so3Cxn9E_mt0"
["refresh_token"]=>
string(110) "69_tFnfQInYcufQQoK5DpstHgucGKGnZjA_Jido5TLyIR1ye3GNYnZS0eJLv5kJ7zJuoJiHD10mzH1wrLicGaFdet_NYkGTAhVZ17QIPMzKkr4"
["provider"]=>
string(6) "WeChat"
}
}
$user的数据结构 静默获取 snsapi_base
{
"id": "oFycus-NxBBtBjfyd_xClnPrdaok",
"name": null,
... ... @@ -103,22 +149,119 @@ class Wechat extends Api
*/
public function get_user_info_by_code (){
$user_id = 0;
try{
$app = WehcatModule::getInstance()->initWechat();
$oauth = $app->oauth;
// 获取 OAuth 授权结果用户信息
$user = $oauth->user();
$openid = $user->id;
$user_info = $app->user->get($openid);
dump($user_info);die;
//如果是授权获取 则可以有
$nickname = $user->nickname;
$avatar = $user->avatar;
//更新user表信息
$save['nickname'] = $nickname;
$save['openid'] = $openid;
$save['avatar'] = $avatar;
$save['jointime'] = $save['prevtime'] = $save['logintime'] = time();
$save['loginip'] = $save['joinip'] = request()->ip();
$w['openid'] = $openid;
$user = Db::name('user')->where($w)->find();
//存在更新否则新增
if(empty($user)){
Db::name('user')->insert($save);
}else{
Db::name('user')->where($w)->update($save);
}
//注册成功 继续注册分销关系
//设置同域下的登录缓存
$user = Db::name('user')->where($w)->find();
session("user_id",$user['id']);
//返回给前端
$user_id = $user['id'];
}catch(\Exception $e){
$this->error($e->getMessage());
}
$this->success('配置获取成功', json_decode($config,true));
if($user_id !=0){
$this->success('完成',$user_id);
}else{
$this->error('code处理失败');
}
}
/*
3.订单支付 前端请求
3.1 入库 订单状态
3.2 入库完成 处理支付接口 返回给前端
wx.chooseWXPay({
timestamp: <?= $config['timestamp'] ?>,
nonceStr: '<?= $config['nonceStr'] ?>',
package: '<?= $config['package'] ?>',
signType: '<?= $config['signType'] ?>',
paySign: '<?= $config['paySign'] ?>', // 支付签名
success: function (res) {
// 支付成功后的回调函数
}
});
3.3 回调修改订单状态
*/
public function prepare_order(){
$user_id = session('user_id');
$user_id = 1;
$userInfo = Db::name('user')->where(['id'=>$user_id])->find();
//3.1订单入库
//3.2 入库完成 处理支付
$out_trade_no = "O".time().uniqid();
$app = WehcatModule::getInstance()->initWechatPay();
$result = $app->order->unify([
'body' => '腾讯充值中心-QQ会员充值',
'out_trade_no' => $out_trade_no,
'total_fee' => 1,
'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
'openid' => $userInfo['openid'],
]);
if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
$prepay_id = $result['prepay_id'];
$jssdk = $app->jssdk;
$config = $jssdk->sdkConfig($prepay_id);
return $this->success('下单成功',$config);
}else{
return $this->error('下单失败');
}
}
/*
3.
微信支付回调信息
*/
public function notify(){
$app = WehcatModule::getInstance()->initWechatPay();
$response = $app->handlePaidNotify(function($message, $fail){
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
file_put_contents("1_cc.log",json_encode($message),FILE_APPEND);
$order = $message['out_trade_no'];
if ($message['return_code'] === 'SUCCESS' && $message['result_code'] === 'SUCCESS') {
} else {
return $fail('通信失败,请稍后再通知我');
}
return true; // 返回处理完成
});
$response->send(); // return $response;
/*
$xml = file_get_contents("php://input");
$xmljson= json_encode(simplexml_load_string($xml, 'SimplexmlElement', LIBxml_NOCDATA));//将对象转换个JSON
file_put_contents("json.txt",$xmljson);
$xmlarray=json_decode($xmljson,true);//将json转换成数组
file_put_contents("1_cc.log",json_encode($xmlarray),FILE_APPEND);
*/
}
}
... ...
... ... @@ -44,4 +44,6 @@ return array (
),
'appid' => 'wx1c3cc5b4e2006be2',
'appsecret' => '643f1b6fdba08a773a7761a1a194a1ad',
'pay_key' => 'e7c30115f2b0fb959977315686b44ce0',
'pay_mch_id' => '1609190540',
);
... ...
... ... @@ -18,45 +18,7 @@ class Wechat {
static private $inc = null;
function __construct(){
//self::$appid= config("site.appid");
//self::$appsecret= config("site.appsecret");
//测试公众号
self::$appid= 'wxb9b259e7a17bda27';
self::$appsecret= '2af20d18bf969d8a26691dfd54cc6380';
//easyWechat配置
self::$config = [
'app_id' => self::$appid,
'secret' => self::$appsecret,
// 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
'response_type' => 'array',
'log' => [
'default' => 'dev', // 默认使用的 channel,生产环境可以改为下面的 prod
'channels' => [
// 测试环境
'dev' => [
'driver' => 'single',
'path' => '/tmp/easywechat.log',
'level' => 'debug',
],
// 生产环境
'prod' => [
'driver' => 'daily',
'path' => '/tmp/easywechat.log',
'level' => 'info',
],
],
],
/**
* OAuth 配置
*
* scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
* callback:OAuth授权完成后的回调页地址:需要前端提供完整的url
*/
'oauth' => [
'scopes' => ['snsapi_base'],
'callback' => '/api/oauth_callback.php',
],
];
}
//静态函数
... ... @@ -68,9 +30,39 @@ class Wechat {
}
//初始化 easywechat app
static public function initWechat(){
$appid= config("site.appid");
$appsecret= config("site.appsecret");
//easyWechat配置
$config = [
'app_id' => $appid,
'secret' => $appsecret,
// 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
'response_type' => 'array',
];
self::$app = Factory::officialAccount(self::$config);
return self::$app;
}
//初始化 jssdk支付
static public function initWechatPay(){
//测试公众号
$appid= config("site.appid");;
$mch_id = config("site.pay_mch_id");
$pay_key = config("site.pay_key");;
$notify_url = request()->domain().url('api/v1/wechat/notify');
$config = [
'app_id' => $appid,
'mch_id' => $mch_id,
'key' => $pay_key,
'cert_path' => '../extend/cert/apiclient_cert.pem', // XXX: 绝对路径!!!!
'key_path' => '../extend/cert/apiclient_key.pem', // XXX: 绝对路径!!!!
'notify_url' => $notify_url, // 你也可以在下单时单独设置来想覆盖它
];
$app = Factory::payment($config);
return $app;
}
}
... ...