使用支付服务为每一个模块服务,每个模块需要创建定单表与模型。
首先需要在站点完成支付宝的配置。
Schema::create('orders', function (Blueprint $table) {
$table->increments('id');
table_site_relation($table);
table_user_relation($table);
$table->decimal('price')->comment('售价');
$table->string('subject')->comment('商品名称');
$table->string('sn')->unique()->comment('定单号');
$table->tinyInteger('status')->default(0)->comment('支付状态');
$table->timestamps();
});
系统完成支付后会调用定单模型的 success
,可以在方法内完成模块定单状态的更改或用户通知的发送。
下面模型定义的方法必须要存在,否则支付会发送失败。
class Order extends Model
{
protected $fillable = ['sn', 'subject', 'price'];
//支付成功调用在这里改变定单状态
//系统会发送异步与同步两次通知
//所以方法会执行两次
public function success()
{
if($this['status']==false){
$this['status'] = true;
$this->save();
}
}
/**
* 系统支付关联用于获取商品的支付信息
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
*/
public function pay()
{
return $this->morphMany(Pay::class, 'pay');
}
//商品定单号
public function sn()
{
return $this['sn'];
}
//商品价格
public function price()
{
return $this['price'];
}
//商品名称
public function subject()
{
return $this['subject'];
}
//商品链接
public function link()
{
return route('system.site.index');
}
}
比如会员购买一个课程商品,使用支付服务可以非常简单的发起支付。
支付成功后会调用模型的 success
方法。
public function show(PayServer $payServer)
{
$lesson = Lesson::find(1);
$payServer->aliPay($lesson);
}
系统提供的 PayServer
服务提供了一些实用方法
$payServer->generateOrderSn()