<?php
namespace
App\Modules\Mall\Http\Controllers;
use
App\Http\Controllers\Controller;
use
Illuminate\Http\Request;
use
DB;
use
App\Wxconfig;
class
PayController
extends
Controller
{
protected
$pay
;
protected
$gid
;
protected
$wxconfig
;
public
function
__construct(Wxconfig
$wxconfig
, Request
$request
)
{
$this
->gid =
$request
->input(
'gid'
);
if
(
$this
->gid) {
$this
->wxconfig =
$wxconfig
;
$this
->pay =
$this
->wxconfig->WxMiniPay(
$this
->gid);
}
else
{
exit
(
'gid no exist'
);
}
}
public
function
pay(Request
$request
)
{
$jssdk
=
$this
->pay->jssdk;
$openid
=
$request
->input(
'openid'
);
$order_no
=
'O'
. time() . rand(10000, 99999);
$order
= DB::table(
'goods_orders'
)->where(
'order_no'
,
'O157066840848073'
)->first();
$result
=
$this
->pay->order->unify([
'body'
=>
'测试小程序微信支付'
,
'out_trade_no'
=>
$order
->order_no,
'total_fee'
=> 1,
'notify_url'
=>
'http://'
.
$_SERVER
[
'SERVER_NAME'
] .
'/mall/api/payNotify'
, // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'trade_type'
=>
'JSAPI'
,
'openid'
=>
$openid
,
]);
if
(
$result
[
'return_code'
] ==
'SUCCESS'
&&
$result
[
'result_code'
] ==
'SUCCESS'
) {
$prepayId
=
$result
[
'prepay_id'
];
$pay_config
=
$jssdk
->sdkConfig(
$prepayId
);
return
$pay_config
;
}
else
{
return
'签名错误'
;
}
}
public
function
payNotify()
{
$response
=
$this
->pay->handlePaidNotify(
function
(
$message
,
$fail
) {
$order
= DB::table(
'goods_orders'
)->where(
'order_no'
,
$message
[
'out_trade_no'
])->first();
if
(!
$order
||
$order
->pay_time) {
return
true;
}
if
(
$message
[
'return_code'
] ===
'SUCCESS'
) {
if
(array_get(
$message
,
'result_code'
) ===
'SUCCESS'
) {
$order_data
= [
'pay_time'
=> time(),
'pay_status'
=> 2,
'transaction_id'
=>
$message
[
'transaction_id'
],
];
}
elseif
(array_get(
$message
,
'result_code'
) ===
'FAIL'
) {
$order
[
'pay_status'
] = 3;
}
}
else
{
return
$fail
(
'通信失败,请稍后再通知我'
);
}
$order
= DB::table(
'goods_orders'
)->where(
'order_no'
,
$message
[
'out_trade_no'
])->update(
$order_data
);
return
true;
});
return
[
'code'
=> 1,
'msg'
=>
'订单支付成功!'
,
'data'
=>
$response
];
}
public
function
orderPayResult(Request
$request
)
{
$order_no
=
$request
->post(
'order_no'
);
$wx_order
=
$this
->wxpay->order->queryByOutTradeNumber(
$order_no
);
if
(
$wx_order
&&
$wx_order
[
'trade_state'
] ===
'SUCCESS'
) {
return
[
'code'
=> 1,
'msg'
=>
'交易成功!'
];
}
return
[
'code'
=> 0,
'msg'
=>
'支付失败!'
,
'data'
=>
$wx_order
];
}
}