123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- <?php
- namespace app\api\controller;
- use app\admin\model\order\Order;
- use app\admin\model\order\OrderGoods;
- use app\admin\model\order\UserGoods;
- use app\common\controller\Api;
- use EasyWeChat\Factory;
- use think\Db;
- use Yansongda\Pay\Pay as YansongdaPay;
- use Yansongda\Pay\Log;
- class Pay extends Api
- {
-
- public function wxpay($arr = ''){
- $app_id = Db::name('config')->where('name','app_id')->value('value');
- $mch_id = Db::name('config')->where('name','mch_id')->value('value');
- $key = Db::name('config')->where('name','key')->value('value');
- $config = [
-
- 'app_id' => $app_id,
- 'mch_id' => $mch_id,
- 'key' => $key,
-
- 'cert_path' => 'path/to/your/cert.pem',
- 'key_path' => 'path/to/your/key',
- 'notify_url' => '默认的订单回调地址',
- ];
- $app = Factory::payment($config);
- $result = $app->order->unify([
- 'body' => '购买教材',
- 'out_trade_no' => $arr['out_trade_no'],
- 'total_fee' => $arr['total_fee'],
- 'notify_url' => 'https://'.$_SERVER['HTTP_HOST'].'/api/pay/wxnotify',
- 'trade_type' => 'JSAPI',
- 'openid' => 'oUpF8uMuAJO_M2pxb1Q9zNjWeS6o',
- ]);
- (new \EasyWeChat\Payment\Jssdk\Client($app))->appConfig($result['prepay_id']);
- return $result;
- }
-
- public function wxnotify(){
- $app_id = Db::name('config')->where('name','app_id')->value('value');
- $mch_id = Db::name('config')->where('name','mch_id')->value('value');
- $key = Db::name('config')->where('name','key')->value('value');
- $config = [
-
- 'app_id' => $app_id,
- 'mch_id' => $mch_id,
- 'key' => $key,
-
- 'cert_path' => 'path/to/your/cert.pem',
- 'key_path' => 'path/to/your/key',
- 'notify_url' => '默认的订单回调地址',
- ];
- $app = Factory::payment($config);
- $response = $app->handlePaidNotify(function($message, $fail){
-
- $OrderModel = new Order();
- $order = $OrderModel->where('order_on',$message['out_trade_no'])->find();
- if (!$order || $order->paid_at) {
- return true;
- }
-
- if ($message['return_code'] === 'SUCCESS') {
-
- if ($message['result_code'] === 'SUCCESS') {
- $OrderGoods = new OrderGoods();
- $UserGoods = new UserGoods();
- $OrderModel = new Order();
- $order = $OrderModel->where('order_on',$message['out_trade_no'])->find();
- $o_arr = [
- 'status' => 1,
- 'paytime' => date('Y-m-d H:i:s')
- ];
- $OrderModel->where('id',$order['id'])->update($o_arr);
- $goods = $OrderGoods->where('order_id',$order['id'])->select();
- foreach ($goods as $k => $v){
- $g_arr = [
- 'goods_type' => $v['goods_type'],
- 'goods_id' => $v['goods_id'],
- 'order_id' => $order['id'],
- 'user_id' => $order['user_id'],
- ];
- $UserGoods->save($g_arr);
- }
-
- } else{
- $order->status = 'paid_fail';
- }
- } else {
- return $fail('通信失败,请稍后再通知我');
- }
- $order->save();
- return true;
- });
- $response->send();
- }
-
- public function alipay($arr){
- $app_id = Db::name('config')->where('name','ali_app_id')->value('value');
- $ali_public_key = Db::name('config')->where('name','ali_public_key')->value('value');
- $private_key = Db::name('config')->where('name','private_key')->value('value');
- $config = [
- 'app_id' => $app_id,
- 'notify_url' => 'https://'.$_SERVER['HTTP_HOST'].'/api/pay/wxnotify',
- 'return_url' => 'http://yansongda.cn/return.php',
- 'ali_public_key' => $ali_public_key,
- 'private_key' => $private_key,
- 'log' => [
- 'file' => './logs/alipay.log',
- 'level' => 'info',
- 'type' => 'single',
- 'max_file' => 30,
- ],
- 'http' => [
- 'timeout' => 5.0,
- 'connect_timeout' => 5.0,
-
- ],
-
- ];
- $order = [
- 'out_trade_no' => $arr['out_trade_no'],
- 'total_amount' => $arr['total_amount'],
- 'subject' => '购买教材',
- ];
- $alipay = YansongdaPay::alipay($config);
- if($arr['type'] == 'H5'){
- $result = $alipay->wap($order);
- }else{
- $result = $alipay->scan($order);
- }
- return $result;
- }
- public function alinotify()
- {
- $app_id = Db::name('config')->where('name','ali_app_id')->value('value');
- $ali_public_key = Db::name('config')->where('name','ali_public_key')->value('value');
- $private_key = Db::name('config')->where('name','private_key')->value('value');
- $config = [
- 'app_id' => $app_id,
- 'notify_url' => 'http://yansongda.cn/notify.php',
- 'return_url' => 'http://yansongda.cn/return.php',
- 'ali_public_key' => $ali_public_key,
- 'private_key' => $private_key,
- 'log' => [
- 'file' => './logs/alipay.log',
- 'level' => 'info',
- 'type' => 'single',
- 'max_file' => 30,
- ],
- 'http' => [
- 'timeout' => 5.0,
- 'connect_timeout' => 5.0,
-
- ],
-
- ];
- $alipay = Pay::alipay($config);
- try{
- $data = $alipay->verify();
-
-
-
-
-
-
- if($data->trade_status == 'TRADE_SUCCESS'){
- $OrderModel = new Order();
- $order = $OrderModel->where('order_on',$data->out_trade_no)->find();
- if (!$order) {
- return $alipay->success()->send();
- }
- $OrderGoods = new OrderGoods();
- $UserGoods = new UserGoods();
- $OrderModel = new Order();
- $order = $OrderModel->where('order_on',$data->out_trade_no)->find();
- $o_arr = [
- 'status' => 1,
- 'paytime' => date('Y-m-d H:i:s')
- ];
- $OrderModel->where('id',$order['id'])->update($o_arr);
- $goods = $OrderGoods->where('order_id',$order['id'])->select();
- foreach ($goods as $k => $v){
- $g_arr = [
- 'goods_type' => $v['goods_type'],
- 'goods_id' => $v['goods_id'],
- 'order_id' => $order['id'],
- 'user_id' => $order['user_id'],
- ];
- $UserGoods->save($g_arr);
- }
- }
- Log::debug('Alipay notify', $data->all());
- } catch (\Exception $e) {
-
- }
- return $alipay->success()->send();
- }
- }
|