| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | <?php/** * @copyright   Copyright (c) 2017 https://www.sapixx.com All rights reserved. * @license     Licensed (http://www.apache.org/licenses/LICENSE-2.0). * @author      pillar<ltmn@qq.com> * 支付接口 */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);    }}
 |