专栏首页coding个人开发者使用laravel6通过payjs接入微信支付

个人开发者使用laravel6通过payjs接入微信支付

个人网站要接入支付接口,微信支付无疑是首选,可是微信原生支付需要企业资质才能接入。由于我们只能借用第三方平台来实现,虽然多了些手续费,也是可接受的

我选择接入的第三方支付平台是 payJs,以下是关于如何在 laravel6 中接入 payJs 的完整 demo

环境准备

先按以下文章创建一个 laravel6 应用

然后,进入 payJs,注册成为会员,提交相关资料,当天就能审核通过

接着下载 payJs 官方扩展包 payjs-laravel

安装扩展包

$ composer require xhat/payjs-laravel

发布配置文件

$ php artisan vendor:publish --provider="Xhat\Payjs\PayjsServiceProvider"

获取商户号

.env 配置商户号

PAYJS_MCHID=商户号
PAYJS_KEY=密钥

config/payjs.php 修改为:

return [
    'mchid' => env('PAYJS_MCHID'),
    'key'   => env('PAYJS_KEY'),

    // 此地址一般无需更改
    'api_url' => 'https://payjs.cn/api/',
];

生成订单表

生成订单 model,用于记录订单数据

$ php artisan make:model Models/Payment -m

在生成的迁移文件 *_create_payments_table 中定义字段:

public function up()
{
    Schema::create('payments', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('trade_no')->comment('用户订单号');
        $table->string('subject')->comment('订单简短描述');
        $table->integer('amount')->comment('订单金额,单位:分');
        $table->tinyInteger('is_paid')->default(0)->nullable()->comment('是否付款 0.否 1.是');
        $table->timestamp('paid_at')->nullable()->comment('付款时间');
        $table->timestamps();
    });
}

执行迁移生成数据表:

$ php artisan migrate

将以下代码粘贴到 app/Models/Payment.php

class Payment extends Model
{
    const PAY_NO = 0;
    const PAY_YES = 1;

    public static $payMap = [
        self::PAY_NO => '否',
        self::PAY_YES => '是',
    ];

    protected $fillable = ['trade_no', 'is_paid', 'amount', 'subject'];

    /**
     * 是否已付款
     * @return bool
     */
    public function paid()
    {
        return $this->is_paid === Payment::PAY_YES;
    }
}

定义路由

routes/web.php 添加以下关于支付的路由

// 调起支付表单
Route::get('/payment', 'HomeController@index')->name('paments.index');

// 写入支付订单,返回二维码
Route::post('/payment', 'PaymentController@store')->name('paments.index');

// 支付回调
Route::post('/payment/notify', 'PaymentController@notify')->name('payments.notify');

// 检查支付状态
Route::post('/payment/check', 'PaymentController@check')->name('payments.check');

支付控制器

生成控制器:

$ php artisan make:controller PaymentController

控制器包括以下逻辑

展示表单

用于展示前台页面,调起支付请求

public function index()
{
    return view('payments.index', [
        'price' => 1, // 单位为分
    ]);
}

生成订单

后端接收前台发起购买的请求,生成一个订单并返回支付二维码

public function store(Request $request)
{
    $payment = Payment::create([
        'trade_no' => time() . rand(9999, 100000),
        'subject' => 'it书童付费文章订单',
        'amount' => $request->price,
        'is_paid' => Payment::PAY_NO,
    ]);
    // 构造订单基础信息
    $data = [
        'body' => $payment->subject, // 订单标题
        'total_fee' => $payment->amount, // 订单标题
        'out_trade_no' => $payment->trade_no, // 订单号
        'notify_url' => route('payments.notify'), // 异步通知地址
    ];
    return Payjs::native($data);
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • vue自定义transition样式前缀名

    默认情况下,控制 transition 样式的类名是以 'v-' 为前缀,我们可以自定义前缀名

    章鱼喵
  • yii2实战之用户注册登录全局函数url美化用户的注册登录小结

    章鱼喵
  • 2018年swoole实战8-内存table

    swoole_table一个基于共享内存和锁实现的超高性能,并发数据结构。用于解决多进程/多线程数据共享和同步加锁问题。既然称之为table, 就像表格一个由行...

    章鱼喵
  • 【基础】固定列宽的表格及示例演示

    对我来说,table 有一个非常有用,支持性也很好的 CSS 属性,但它却很少为人所知。它改变了表格的渲染方式,并生成一个更加稳定可靠的布局。

    毛瑞
  • 百度烽火计划升级,推出烽火算法2.0

    一年前,百度针对移动搜索后退操作被劫持到非百度站点曾推出过一个烽火行动计划,用于打击非法劫持。这个烽火行动计划最开始是非常有限的应用场景,即针对劫持百度自身流量...

    世纪访客
  • 用Python研究了三千套房子,告诉你究竟是什么抬高了房价?

    关于房价,一直都是全民热议的话题,毕竟不少人终其一生都在为之奋斗。 房地产的泡沫究竟有多大不得而知?今天我们抛开泡沫,回归房屋最本质的内容,来分析一下房价的影...

    Python中文社区
  • Pandas和Numpy的视图和拷贝

    在Numpy和Pandas中,有两个重要概念,容易混淆,一个是浅拷贝,也称为视图,另外一个是深拷贝,或者就称为拷贝。如果操作不当,Pandas会爆出Settin...

    老齐
  • 构造方法、方法的重载

    如果两个方法只是方法的返回值(返回值类型 )不一样,其他都一样,这构不成方法的重载,因为调用方法时无法确定调用的哪个方法,所以编译时会报错!

    爱学习的孙小白
  • Java基础笔记整理---【07】面向对象程序设计-类和对象

    方法(函数): 返回值 方法名(参数类型 参数名称, ...){ 方法体(代码块) } this指调用的方法中(当前)的变量 类与对象 1.构造...

    李志伟
  • Java访问修饰符

    试想, 如果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误, 就象一个人的名字, 不能被外部随意修改,只能通过各种给定的方法去修改这个属性。...

    赵哥窟

扫码关注云+社区

领取腾讯云代金券