* 支付接口 */ namespace app\allwin\controller\api\v4; use app\allwin\controller\api\Base; use app\allwin\model\AllwinInfo; use app\allwin\model\AllwinInfoOrder; use app\allwin\model\MchId; use app\common\facade\WechatPay; use app\allwin\model\AllwinConfig; use filter\Filter; class Infodopay extends Base{ /** * 初始化当前应用是否登录 * @return void */ public function initialize() { parent::initialize(); $this->isUserAuth(); } /** * 购买商品 */ public function index(){ if (request()->isPost()) { $param['id'] = $this->request->param('id/d'); $param['telphone'] = $this->request->param('telphone/s',''); $param['message'] = $this->request->param('message',''); $param['ucode'] = $this->request->param('ucode',''); $param['fields'] = $this->request->param('fields/s','[]','htmlspecialchars_decode'); $param['signkey'] = $this->request->param('signkey'); $param['sign'] = $this->request->param('sign'); $sign = $this->apiSign($param); if($sign['code'] != 200){ return enjson($sign['code'],'签名验证失败'); } $param['fields'] = json_encode(Filter::filter_escape(json_decode($param['fields'],true))); //判断是否已下架 $item = AllwinInfo::where(['member_miniapp_id' => $this->miniapp_id,'id' => $param['id'],'is_lock' => 0])->find(); if(empty($item)){ return enjson(403,'信息不存在'); } //读取订单 $order_no = $this->user->invite_code.order_no(); $amount = $item->price; //唤醒微信支付参数 $payparm = [ 'openid' => $this->user->miniapp_uid, 'miniapp_id' => $this->miniapp_id, 'name' => $item->mp->title, 'order_no' => $order_no, 'total_fee' => $amount <= 0 ? 1 : $amount*100, 'notify_url' => api(4,'allwin/infonotify/order',$this->miniapp_id), ]; //读取配置 $setting = AllwinConfig::getConfig($this->miniapp_id); if($setting->is_psp == 1){ $default_mchid = MchId::getMch(0, $this->miniapp_id); //默认收款账户 if(empty($default_mchid)) { return enjson(403,'未找到商户号'); } $payparm['mchid'] = $default_mchid->mchid; } $ispay = WechatPay::orderPay($payparm); if ($ispay['code'] == 0) { return enjson(403,$ispay['msg']); } //判断是否新订单 $param['member_miniapp_id'] = $this->miniapp_id; $param['uid'] = $this->user->id; $param['info_uid'] = $item->user_id; $param['info_id'] = $item->id; $param['phone'] = $param['telphone']; $param['amount'] = $amount; $param['order_no'] = $order_no; $param['message'] = $param['message']; $param['fields'] = $param['fields']; $param['cache'] = $item->toJson(); $rel = AllwinInfoOrder::insertOrder($param,$order_no); if(empty($rel)){ return enjson(204,'购买商品失败'); } return enjson(200,'成功',$ispay['data']); } } /** * 我的订单 * @return void */ public function order(){ $param['active'] = $this->request->param('active/d',0); $param['page'] = $this->request->param('page/d',1); $param['signkey'] = $this->request->param('signkey'); $param['sign'] = $this->request->param('sign'); $rel = $this->apiSign($param); if($rel['code'] != 200){ return enjson($rel['code'],'签名验证失败'); } $condition['uid'] = $this->user->id; $condition['is_del'] = 0; switch ($param['active']) { case 1: $condition['paid_at'] = 0; break; case 2: $condition['paid_at'] = 1; $condition['status'] = 0; break; case 3: $condition['paid_at'] = 1; $condition['status'] = 1; break; } $lists = AllwinInfoOrder::where($condition)->field('cache',true)->order('id desc')->paginate(10)->toArray(); $data = []; foreach ($lists['data'] as $key => $value) { $data[$key] = $value; $data[$key]['fields'] = json_decode($value['fields'],true); } return enjson(200,'成功',$data); } }