/**
 * 跳转到支付界面
 * @param $config
 */
function wechat_redirect($config, $type = 'pay')
{
    /*
     * @var Omnipay\Wechat\ExpressGateway
     */
    try {
        //        $gateway = \Omnipay\Omnipay::create('Wechat_Express');
        $gateway = new \Omnipay\Wechat\ExpressGateway();
        $gateway->setAppId($config['app_id']);
        $gateway->setKey($config['pay_sign_key']);
        $gateway->setPartner($config['partner']);
        $gateway->setPartnerKey($config['partner_key']);
        $gateway->setNotifyUrl($config['notify_url']);
        $gateway->setReturnUrl($config['return_url']);
        $gateway->setReturnUrl($config['cancel_url']);
        $gateway->setCertPath($config['cert_path']);
        $gateway->setCertKeyPath($config['cert_key_path']);
        $out_trade_no = $_GET['out_trade_no'];
        $opts = array('open_id' => array_get($config, 'open_id', false), 'subject' => $_GET['subject'], 'description' => '微信无效', 'total_fee' => $_GET['total_fee'], 'out_trade_no' => $out_trade_no);
        if ($type == 'prepay') {
            $res = $gateway->prePurchase(array_add($opts, 'trade_type', 'APP'))->send();
            echo json_encode($res->getTransactionReference());
            exit(0);
        } else {
            $res = $gateway->purchase($opts)->send();
        }
        //        $res = $gateway->prePurchase($opts)->send();
        //        $ret = $res->getTransactionReference();
        //        echo $ret;
        $cache = get_cache();
        $cache->save($out_trade_no, $opts);
        if (!empty($_GET['redirect'])) {
            $res->redirect('js');
        }
        if (!empty($_GET['link'])) {
            $url = $res->getRedirectUrl();
            if (empty($_GET['qr'])) {
                echo "<html>";
                echo "<a href=\"{$url}\">{$url}</a>";
                echo "</html>";
            } else {
                QRcode::png($url);
            }
            die;
        }
        $res->redirect();
    } catch (\Exception $e) {
        var_dump($e->getMessage());
    }
}