Laravel+esaywechat实现公众号微信支付
## 首先安装easywechat包
laravel项目直接在终端跑以下命令:
composer require overtrue/wechat:~4.0
然后创建配置文件:
php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider"
创建配置文件完成后会在你项目的config文件夹下生成一个wechat.php的文件
编辑wechat.php,这截图的是默认屏蔽的,看你个人需要释放相关代码。并填上相关参数,app_id,mch_id等等。可在.env里面配置,如果觉得麻烦可直接写在default里面。至此所有准备工作完毕。
代码块
1,laravel路由
Route::middleware('wechat.oauth', 'wechat')->group(function () {
Route::get('/pay', 'CourseController@pay');//支付路由
});
Route::post('/order/notify', 'OrderController@notify');//回调路由
注意
1.1,回调路由必须在middleware中间件路由外面,否则微信请求不到。
1.2,回调路由必须是post请求。
1.3,laravel框架必须取消回调路由的csrf防护。在你项目的app/Http/Middleware/VerifyCsrfToken.php中加入如下代码:
protected $except = [
'order/notify',//回调路由取消csrf防护
];
2,支付流程
2.1,点击支付按钮,ajax提交相应参数到后台支付方法。
2.2,后台接收数据,往你的订单表里插入一条订单数据,状态为0,也就是未支付状态。
2.3,带上这条订单的订单号,价格,请求微信换取prepay_id。
2.4,请求微信成功会返回支付所需要的参数,appid,timestamp等。返回前端js 调起支付。
2.5,支付后微信会将支付结果通过回调返回,可根据返回信息更改订单状态,或者进行其他操作。
3,项目代码
3.1,前端js代码:
var a;
$('.pay').click(function () {
var course_id=$(this).val();//购买商品的id
var price=$('.price').text();//购买商品的价格
$.ajax({
type:"GET",
url:"/wechat/course/pay",
data:{
course_id: