laravel 安装 laravel-wechat 实现微信授权登录
一。下载 laravel-wechat
https://packagist.org/packages/overtrue/laravel-wechat
二。使用 composer 安装 laravel-wechat
composer require "overtrue/laravel-wechat:~4.0"
三。配置
在 config/app.php 注册 ServiceProvider 和 Facade (Laravel 5.5 + 无需手动注册)
'providers' => [
// ...
Overtrue\LaravelWeChat\ServiceProvider::class,
],
'aliases' => [
// ...
'EasyWeChat' => Overtrue\LaravelWeChat\Facade::class,
],
创建配置文件:
php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider
1. 修改应用根目录下的 config/wechat.php 中对应的参数即可。
WECHAT_LOG_LEVEL=info //日志级别 最好和laravel同级
WECHAT_LOG_FILE=/var/log/coupon/report.log //日志保存文件 最好和laravel 统一
WECHAT_OFFICIAL_ACCOUNT_APPID=申请的appid
WECHAT_OFFICIAL_ACCOUNT_SECRET=申请的appsecret
WECHAT_OFFICIAL_ACCOUNT_TOKEN=
WECHAT_OFFICIAL_ACCOUNT_AES_KEY=
easyWeChat 微信公众号验证 token
env('WECHAT_OFFICIAL_ACCOUNT_APPID'),
'secret' => env('WECHAT_OFFICIAL_ACCOUNT_SECRET'),
'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN'),
// 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
'response_type' => 'array',
'log' => [
'level' => 'debug',
],
];
//从wechat.php 配置文件获取
$config = config('wechat.official_account.default');
$app = Factory::officialAccount($config);
$response = $app->server->serve();
$response->send(); // Laravel 里请使用:return $response;
}
}
laravel 使用 EasyWeChat 统一下单
use EasyWeChat\Factory;
private $app;
public function __construct()
{
$config = config('wechat.payment.default');
$this->app = Factory::payment($config);
}
public function payment(PayRequest $request){
$isContract = true;
$result = $this->app->order->unify([
'body' => '用户下单',
'out_trade_no' => $order_no,
'total_fee' => 10,
// 'spbill_create_ip' => '123.12.12.123', // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址
'notify_url' => config('wechat.payment.default.notify_url'), // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
'openid' => Auth::user()->openid,
], $isContract);
//注意
1、如果支付时出现报错,timestame 参数问题。这是 easywechat 底层文件出错了。
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
$config['timeStamp'] = $config['timestamp'];
unset($config['timestamp']);
return $this->success( $config);
}else{
return $this->fail('支付失败');
}
2、如果签名失败
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
$prepayId = $result['prepay_id'];
$jssdk =$this->app->jssdk;
$config = $jssdk->sdkConfig($prepayId);
$config['timeStamp'] = $config['timestamp'];
unset($config['timestamp']);
return $this->success( $config);
}else{
return $this->fail('支付失败');
}
}
申请退款
退款方式 分为两种
第一种:根据微信订单号退款
// 参数分别为:微信订单号、商户退款单号、订单金额、退款金额、其他参数
$app->refund->byTransactionId(string $transactionId, string $refundNumber, int $totalFee, int $refundFee, array $config = []);
// Example:
$result = $app->refund->byTransactionId('transaction-id-xxx', 'refund-no-xxx', 10000, 10000, [
// 可在此处传入其他参数,详细参数见微信支付文档
'refund_desc' => '商品已售完',
]);