Example #1
0
 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();
     }
 }
Example #2
0
 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';
 }
Example #3
0
 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'];
 }
Example #4
0
 /**
  * 	作用:使用证书,以post方式提交xml到对应的接口url
  */
 function postXmlSSLCurl($xml, $url, $second = 30)
 {
     $ch = curl_init();
     //超时时间
     curl_setopt($ch, CURLOPT_TIMEOUT, $second);
     //这里设置代理,如果有的话
     //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
     //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     //设置header
     curl_setopt($ch, CURLOPT_HEADER, FALSE);
     //要求结果为字符串且输出到屏幕上
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     //设置证书
     //使用证书:cert 与 key 分别属于两个.pem文件
     //默认格式为PEM,可以注释
     curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
     curl_setopt($ch, CURLOPT_SSLCERT, WxPayConf_pub::SSLCERT_PATH());
     //默认格式为PEM,可以注释
     curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
     curl_setopt($ch, CURLOPT_SSLKEY, WxPayConf_pub::SSLKEY_PATH());
     //post提交方式
     curl_setopt($ch, CURLOPT_POST, true);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
     $data = curl_exec($ch);
     //返回结果
     if ($data) {
         curl_close($ch);
         return $data;
     } else {
         $error = curl_errno($ch);
         echo "curl出错,错误码:{$error}" . "<br>";
         echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
         curl_close($ch);
         return false;
     }
 }
Example #5
0
 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");
 }