public function config($config = null) { include_once dirname(__FILE__) . "/wxpay/WxPayPubHelper.php"; //引入文件需求 /*echo "<pre/>"; print_r($config);exit;*/ $this->config = $config; $this->db = System::load_sys_class('model'); $pay_type = $this->db->GetOne("SELECT * from `@#_pay` where `pay_class` = 'wxpay' and `pay_start` = '1'"); $pay_type_key = unserialize($pay_type['pay_key']); WxPayConf_pub::$APPID = $pay_type_key['APPID']['val']; //微信的APPID WxPayConf_pub::$MCHID = $pay_type_key['MCHID']['val']; //微信商户号 WxPayConf_pub::$KEY = $pay_type_key['KEY']['val']; //微信支付秘钥 WxPayConf_pub::$APPSECRET = $pay_type_key['APPSECRET']['val']; WxPayConf_pub::$NOTIFY_URL = $config['NotifyUrl']; if ($config['type'] == 1) { $this->config_jsdz(); } if ($config['type'] == 2) { $this->config_dbjy(); } }
public function config($config = null) { if (empty($_SERVER['HTTP_USER_AGENT']) || strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') === false && strpos($_SERVER['HTTP_USER_AGENT'], 'Windows Phone') === false) { header('Location: ' . WEB_PATH . '/pay/wxpay_web_url/payinfo/nowechat'); die; } include_once dirname(__FILE__) . "/wxpay/WxPayPubHelper.php"; if (empty($config['pay_type_data'])) { $this->db = System::load_sys_class('model'); $pay = $this->db->GetOne("SELECT * from `@#_pay` where `pay_class` = 'wxpay_web'"); $config['pay_type_data'] = unserialize($pay['pay_key']); } WxPayConf_pub::$APPID = $config['pay_type_data']['APPID']['val']; WxPayConf_pub::$MCHID = $config['pay_type_data']['MCHID']['val']; WxPayConf_pub::$KEY = $config['pay_type_data']['KEY']['val']; WxPayConf_pub::$APPSECRET = $config['pay_type_data']['APPSECRET']['val']; $jsApi = new JsApi_pub(); if (!isset($_GET['code'])) { $url = G_WEB_PATH . '/index.php/pay/wxpay_web_url/?money=' . $config['money'] . '&out_trade_no=' . $config['code']; $url = $jsApi->createOauthUrlForCode(urlencode($url)); header("Location: {$url}"); die; } else { $jsApi->setCode($_GET['code']); $openid = $jsApi->getOpenId(); } // var_dump($_GET); // echo $openid;die; WxPayConf_pub::$SSLCERT_PATH = dirname(__FILE__) . '/cacert/apiclient_cert.pem'; WxPayConf_pub::$SSLKEY_PATH = dirname(__FILE__) . '/cacert/apiclient_key.pem'; //=========步骤2:使用统一支付接口,获取prepay_id============ //使用统一支付接口 $unifiedOrder = new UnifiedOrder_pub(); //设置统一支付接口参数 //设置必填参数 //appid已填,商户无需重复填写 //mch_id已填,商户无需重复填写 //noncestr已填,商户无需重复填写 //spbill_create_ip已填,商户无需重复填写 //sign已填,商户无需重复填写 $unifiedOrder->setParameter("openid", $openid); $unifiedOrder->setParameter("body", "购买商品"); //商品描述 $unifiedOrder->setParameter("out_trade_no", $config['code']); //商户订单号 $unifiedOrder->setParameter("total_fee", $config['money'] * 100); //总金额 $unifiedOrder->setParameter("notify_url", $config['NotifyUrl']); //通知地址 $unifiedOrder->setParameter("trade_type", "JSAPI"); //交易类型 $prepay_id = $unifiedOrder->getPrepayId(); //=========步骤3:使用jsapi调起支付============ $jsApi->setPrepayId($prepay_id); $jsApiParameters = $jsApi->getParameters(); include 'wxpay_web.html.php'; }
public function __construct($wxpayconfig = array()) { self::$APPID = $wxpayconfig['appid']; self::$APPSECRET = $wxpayconfig['appsecret']; self::$MCHID = $wxpayconfig['mchid']; self::$KEY = $wxpayconfig['key']; self::$JS_API_CALL_URL = $wxpayconfig['js_api_call_url']; self::$CURL_TIMEOUT = $wxpayconfig['CURL_TIMEOUT']; self::$SSLCERT_PATH = $wxpayconfig['SSLCERT_PATH']; self::$SSLKEY_PATH = $wxpayconfig['SSLKEY_PATH']; self::$NOTIFY_URL = $wxpayconfig['notifyurl']; self::$RETURN_URL = $wxpayconfig['returnurl']; }
public function houtai() { include_once dirname(__FILE__) . "/lib/wxpay/WxPayPubHelper.php"; $pay = $this->db->GetOne("SELECT * from `@#_pay` where `pay_class` = 'wxpay_web'"); $config = array(); $config['pay_type_data'] = unserialize($pay['pay_key']); WxPayConf_pub::$APPID = $config['pay_type_data']['APPID']['val']; WxPayConf_pub::$MCHID = $config['pay_type_data']['MCHID']['val']; WxPayConf_pub::$KEY = $config['pay_type_data']['KEY']['val']; WxPayConf_pub::$APPSECRET = $config['pay_type_data']['APPSECRET']['val']; $notify = new Notify_pub(); //存储微信的回调 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; $notify->saveData($xml); //验证签名,并回应微信。 //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败, //微信会通过一定的策略(如30分钟共8次)定期重新发起通知, //尽可能提高通知的成功率,但微信不保证通知最终能成功。 if ($notify->checkSign() == FALSE) { echo 'haha'; exit; $notify->setReturnParameter("return_code", "FAIL"); //返回状态码 $notify->setReturnParameter("return_msg", "签名失败"); //返回信息 } else { $notify->setReturnParameter("return_code", "SUCCESS"); //设置返回码 } $returnXml = $notify->returnXml(); echo $returnXml; if ($notify->checkSign() == false) { mylog('wxpay_web', "【签名错误】:\n" . $xml . "\n"); die; } elseif ($notify->data["return_code"] == "FAIL") { mylog('wxpay_web', "【通信出错】:\n" . $xml . "\n"); die; } elseif ($notify->data["result_code"] == "FAIL") { mylog('wxpay_web', "【业务出错】:\n" . $xml . "\n"); die; } nolog('wxpay_web'); mylog('wxpay_web', $notify->data); $total_fee_t = $notify->data['total_fee'] / 100; $out_trade_no = $notify->data['out_trade_no']; $dingdaninfo = $this->db->GetOne("select * from `@#_member_addmoney_record` where `code` = '{$out_trade_no}'"); if (!$dingdaninfo) { mylog('wxpay_web', 'f1'); echo "fail"; exit; } if ($dingdaninfo['status'] == '已付款') { mylog('wxpay_web', 's1'); echo "success"; exit; } $this->db->Autocommit_start(); $dingdaninfo = $this->db->GetOne("select * from `@#_member_addmoney_record` where `code` = '{$out_trade_no}' and `money` = '{$total_fee_t}' and `status` = '未付款' for update"); if (!$dingdaninfo) { mylog('wxpay_web', 'f2'); echo "fail"; exit; } $uid = $dingdaninfo['uid']; $time = time(); $up_q1 = $this->db->Query("UPDATE `@#_member_addmoney_record` SET `pay_type` = '微信公众号', `status` = '已付款' where `id` = '{$dingdaninfo['id']}' and `code` = '{$dingdaninfo['code']}'"); $up_q2 = $this->db->Query("UPDATE `@#_member` SET `money` = `money` + {$total_fee_t} where (`uid` = '{$dingdaninfo['uid']}')"); $up_q3 = $this->db->Query("INSERT INTO `@#_member_account` (`uid`, `type`, `pay`, `content`, `money`, `time`) VALUES ('{$dingdaninfo['uid']}', '1', '账户', '通过微信公众号充值', '{$total_fee_t}', '{$time}')"); if ($up_q1 && $up_q2 && $up_q3) { $this->db->Autocommit_commit(); } else { $this->db->Autocommit_rollback(); mylog('wxpay_web', 'f3'); echo "fail"; exit; } if (empty($dingdaninfo['scookies'])) { mylog('wxpay_web', 's2'); echo "success"; exit; } $scookies = unserialize($dingdaninfo['scookies']); $pay = System::load_app_class('pay', 'pay'); $pay->scookie = $scookies; $ok = $pay->init($uid, $pay_type['pay_id'], 'go_record'); if ($ok != 'ok') { echo "fail"; exit; } $check = $pay->go_pay(1); if ($check) { $this->db->Query("UPDATE `@#_member_addmoney_record` SET `scookies` = '1' where `code` = '{$out_trade_no}' and `status` = '已付款'"); echo "1"; exit; } else { echo "fail"; exit; } $pay->init($uid, $pay_type['pay_id'], 'go_record'); //云购商品 }
public function wxPay() { $order_id = ggp('order_id:i'); vendor('WxPayPubHelper.WxPay', '', '.pub.config.php'); WxPayConf_pub::$SSLCERT_PATH .= $_SERVER['SERVER_NAME'] . '_cert.pem'; WxPayConf_pub::$SSLKEY_PATH .= $_SERVER['SERVER_NAME'] . '_key.pem'; WxPayConf_pub::$APPID = $this->setting['wx_appid']; WxPayConf_pub::$MCHID = $this->setting['wx_mchid']; WxPayConf_pub::$KEY = $this->setting['wx_key']; WxPayConf_pub::$APPSECRET = $this->setting['wx_appsecret']; vendor('WxPayPubHelper.WxPayPubHelper'); $where = "order_id='{$order_id}' and state=6"; $order = M('order')->where($where)->find(); if (empty($order)) { exit('没有找到订单'); } $unifiedOrder = new UnifiedOrder_pub(); $unifiedOrder->setParameter("body", $order['store_name']); //商品描述 $unifiedOrder->setParameter("out_trade_no", $order['order_sn']); //商户订单号 $unifiedOrder->setParameter("total_fee", $order['pay_price'] * 100); //总金额 $notify = "http://{$_SERVER['SERVER_NAME']}/wx_notify.php"; $unifiedOrder->setParameter("notify_url", $notify); //通知地址 $unifiedOrder->setParameter("trade_type", "NATIVE"); //交易类型 $unifiedOrderResult = $unifiedOrder->getResult(); //商户根据实际情况设置相应的处理流程 if ($unifiedOrderResult["return_code"] == "FAIL") { //商户自行增加处理流程 echo "通信出错:" . $unifiedOrderResult['return_msg'] . "<br>"; } elseif ($unifiedOrderResult["result_code"] == "FAIL") { //商户自行增加处理流程 echo "错误代码:" . $unifiedOrderResult['err_code'] . "<br>"; echo "错误代码描述:" . $unifiedOrderResult['err_code_des'] . "<br>"; } elseif ($unifiedOrderResult["code_url"] != NULL) { //从统一支付接口获取到code_url $codeUrl = $unifiedOrderResult["code_url"]; } $this->a('codeUrl', $codeUrl); $this->a('order_id', $order_id); $this->d("Order:wxpay"); }