简介
支付行为是一个非常普遍的功能,因此KyPHP也从底层为开发者提供了应用中的支付功能。
应用内调用支付组件的逻辑脑图如下:

使用
配置
1、公众号管理中支付配置在: 域名/mp/setting/index
2、支付授权目录为: 域名/mp/payment/
支付代码
下单时,有几个注意点:
1、mp_order 务必传入 notify_url (回调处理器)和 return_url(支付成功后跳转落地页),如下:
'notify_url' => request()->domain() . addon_url('payCallback', ['mid' => $this->mpId]),
'return_url' => request()->domain() . addon_url('detail', ['id' => $id])2、下单成功后,重定向到app\mp\payment中的pay操作,如下:
$this->redirect(request()->domain() . url('mp/payment/pay') . '?order_no='.$order_data['order_no']);3、订单信息需要存储两份,全局的mp_order 表和应用中的业务订单表(如demo_order),如:
$order_data = [
'mpid' => $this->mpId,
'order_no' => demo_build_order_no(),
'openid' => $this->followInfo['openid'],
'subject' => '打赏',
'body' => '文章【'.$data['title'].'】',
'amount' => 1,
'notify_url' => request()->domain() . addon_url('payCallback', ['mid' => $this->mpId]),
'return_url' => request()->domain() . addon_url('detail', ['id' => $id])
];
model('common/mpOrder')->addOne($order_data);
unset($order_data['notify_url'], $order_data['return_url']);
$order_data = array_merge($order_data, [
'article_id' => $id,
'username' => $this->followInfo['nickname'],
'headimgurl' => $this->followInfo['headimgurl'],
'total' => $order_data['amount'],
'client_ip' => request()->ip()
]);
$res = $this->orderM->addOne($order_data);支付成功回调,需要注意:
1、首先修改两个订单表中的对应订单的支付状态,例如:
$order_info = model('common/mpOrder')->getOneByMap(['order_no' => $data['out_trade_no']]);
if(!empty($order_info) && $order_info['paid'] == 0) {
//更新订单
model('common/mpOrder')->updateOne([
'id' => $order_info['id'],
'paid' => 1
]);
$this->orderM->updateByMap(
['order_no' => $data['out_trade_no']],
['paid' => 1, 'pay_time' => time(), 'transaction_id' => $data['transaction_id']]
);
}其他相关的业务操作根据要求进行即可。
完整支付功能的具体代码实现可以查看应用demo的打赏功能