注册服务号,需进行微信认证,此时需缴费 300 元/年,必须是认证成功的服务号才能开通微信支付。
注册微信支付商户号
1、登录 https://pay.weixin.qq.com/index.php/core/home/login?return_url=https%3A%2F%2Fpay.weixin.qq.com%2Findex.php%2Fextend%2Fpay_setting%2Fma
,
点击 接入微信
,点击 注册微信支付商户号
,按步骤 创建申请单
–填写商户资料
–确认提交
即可。 <按提示进行操作即可,步骤无比繁琐>
2、管理员微信号关注 微信支付商家助手
,以上操作步骤完成并通过后,商家助手会收到 入驻申请进展通知---待签约
,用管理员手机点进去,扫脸确认签约即可,完成后商家助手会收到 入驻成功
信息。
3、接下来完成 APPID授权管理
,登录到微信服务号首页,找到 设置与开发---接口权限
,在右边找到 微信支付接口---未获得
,点击 申请
。在 待关联商户号
一栏中,点击 确认
,同意授权即可。
此时在 已关联商户号
一栏中显示对应内容,返回 接口权限
页面,查看右边的 微信支付接口
显示 已获得
。
微信支付商户后台配置
1、微信商户平台(pay.weixin.qq.com)–>账户中心–>账户设置–>API安全–>设置API密钥,密钥需下载下来放到项目的根目录。接下来设置 APIv2
秘钥、设置 APIv3
秘钥。
2、产品中心–>开发配置–>支付配置,在此添加 JSAPI支付授权目录
,如下图所示:
3、关联服务号,如下图:
4、登录微信公众服务号后台,对公众号进行功能设置,如下图:
微信支付功能开发
1、打开 easyWeChat
官网,找到 Laravel 5 拓展包,按步骤安装 laravel-wechat
。
// 安装easyWeChat包
composer require "overtrue/laravel-wechat:~5.1"
// 创建配置文件
php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider"
在
composer.json
中显示的laravel-wechat
版本号为"overtrue/laravel-wechat": "^5.1",
。
在项目的
config
文件夹中自动生成wechat.php
文件。
2、在 config/wechat.php
中打开微信支付的配置,然后在 .env
文件中做如下配置:
WECHAT_DEBUG=true
# 此配置是实现微信公众号登录认证的配置
WECHAT_OFFICIAL_ACCOUNT_APPID='微信公众号的APPID'
WECHAT_OFFICIAL_ACCOUNT_SECRET='微信公众号的开发者密码(AppSecret)'
WECHAT_OFFICIAL_ACCOUNT_TOKEN='随意字符串'
WECHAT_PAYMENT_APPID='微信公众号APPID'
WECHAT_PAYMENT_MCH_ID='微信支付商户号'
WECHAT_PAYMENT_KEY='Hubei***********8'
3、添加下单和支付路由:
Route::prefix('order')->group(function () {
// 下单
Route::post('/', 'OrderController@store');
// 支付
Route::get('/pay/{id}', 'OrderController@pay');
});
4、创建订单的控制器方法和模型以及数据表 orders
php artisan make:controller OrderController
php artisan make:model Models/Order
// 模型里面添加黑名单
protected $guarded = [];
// orders 表的字段,以下只是范例,可根据需求自行添加
id、customer_id、out_trade_no、status、total_price、created_at、pay_time、updated_at
我的表结构如下:
5、在 Order
控制器里面的 store
方法,代码如下:
use App\Models\Shop\Address;
use App\Models\Shop\Cart;
use App\Models\Shop\Order;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
// 下单
function store(Request $request)
{
$carts = Cart::with('product')->where('customer_id', session('wechat.customer.id'))->get();
// 防止用户使用微信的后退按钮,重新提交订单,导致出现没有数据的订单
if ($carts->isEmpty()