<?php

namespace Api\Controller;

use Yansongda\Pay\Pay;

class PayController extends PublicController
{
    /**
     * @description: 子类的初始化
     */
    public function _initialize()
    {
        //父级构造函数
        parent::_initialize();

        //初始化 pay类的参数
        $this->config = [
            'wechat' => [
                'default' => [
                    'mch_id' => C('weixin')['mch_id'], // 必填-商户号
                    'mch_secret_key' => C('weixin')['mch_secret_key'], // 必填-v3商户秘钥
                    'mch_secret_cert' => C('weixin')['mch_secret_cert'], // 必填-商户私钥路径
                    'mch_public_cert_path' => C('weixin')['mch_public_cert_path'], // 必填-商户公钥证书路径
                    'notify_url' => C('host') . 'flycube.php/Api/Pay/notifyCallback', // 必填-回调通知地址
                    'mini_app_id' => C('weixin')['appid'], // 选填-小程序 的 app_id
                    'wechat_public_cert_path' => [ // 必填-微信平台公钥证书路径
                        '5878026B07BD819CCC25AC95FA31AE45BB6BC0D9' => C('weixin')['wechat_public_cert_path'],
                    ],
                ],
            ],
            'logger' => [ // optional
                'enable' => true,
                'file' => C('weixin')['payLogger_path'],
                'level' => 'info', // 建议生产环境等级调整为 info，开发环境为 debug
                'type' => 'single', // optional, 可选 daily
                'max_file' => 30, // optional, 当 type 为 daily 时有效，默认 30 天
            ],
            'http' => [ // optional
                'timeout' => 5.0,
                'connect_timeout' => 5.0,
            ],
        ];
    }
    /**
     * @description: Yansongda pay类的参数
     */
    protected $config;
    /**
     * @description: 发起小程序支付
     */
    public function pay()
    {
        //获取订单信息
        $where['order_sn'] = $_REQUEST['order_sn'];
        $orderDb = D('order');
        $order = $orderDb->where($where)->find();
        //设置获取签名的订单参数
        $orderParameter = [
            'out_trade_no' => $order['order_sn'],
            'description' => $order['shop_id'],
            'amount' => [
                'total' => $order['total_price'] * 100, //单位:分
                'currency' => 'CNY',
            ],
            'payer' => [
                'openid' => $this->openid,
            ]
        ];

        try {
            $pay = Pay::wechat($this->config)->mini($orderParameter);
            echo json_encode(array('status' => 1, 'payMsg' => $pay));
        } catch (\Exception $e) {
            echo json_encode(array('status' => 0, 'msg' => 'Error: ' . $e->getMessage()));
        }
    }

    public function notifyCallback()
    {
        $pay = Pay::wechat($this->config);

        try {
            $data = $pay->callback(); // 是的，验签就这么简单！
        } catch (\Exception $e) {
            // $e->getMessage();
        }

        return $pay->success();
    }
}
