function notify_callback($config, $get, $raw_post) { $cache = get_cache(); try { $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']); $cache->save(LAST_NOTIFY_CACHE_KEY, func_get_args()); $response = $gateway->completePurchase(array('request_params' => $get, 'body' => $raw_post))->send(); if ($response->isSuccessful() && $response->isTradeStatusOk()) { //todo success $serial = $cache->fetch($get['out_trade_no']); $serial['notify'] = array('status' => 'success', 'param' => http_build_query($get), 'body' => $raw_post); $data = json_decode(json_encode(simplexml_load_string($raw_post, 'SimpleXMLElement', LIBXML_NOCDATA)), true); $cache->save($get['out_trade_no'], $serial); $cache->save(LAST_NOTIFY_CACHE_KEY, array('param' => http_build_query($get), 'body' => $raw_post, 'data' => $data, 'status' => $response->getMessage())); $cache->delete(LAST_ERROR_CACHE_KEY); die($response->getMessage()); // die('success'); } else { die($response->getMessage()); } } catch (\Exception $e) { $cache->save(LAST_ERROR_CACHE_KEY, $e->getLine() . ': ' . $e->getMessage()); die('exception: ' . $e->getLine() . ' - ' . $e->getMessage()); } }
/** * 跳转到支付界面 * @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()); } }