|
- <?php
- /**
- *
- * ============================================================================
- * * 版权所有 蜘蛛出行 * *
- * 网站地址: http://www.zhizhuchuxing.com
- * ----------------------------------------------------------------------------
- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
- * 使用;不允许对程序代码以任何形式任何目的的再发布。
- * ============================================================================
- * Author By: 倪宗锋
- * PhpStorm WxPayService.php
- * Create By 2016/11/30 13:31 $
- */
-
-
- namespace Base\Tool;
-
- use Model\Model\OrderMain;
- use Util\Util\CurlInterface;
- use Util\Util\Util;
-
- /**
- * Class WxPayService
- * 微信交易接口调用核心类
- * @package Base\Tool
- */
- class WxPayService
- {
- private $unifiedOrderUrl = 'https://api.mch.weixin.qq.com/pay/unifiedorder';//统一下单API
- private $notify_url = '/wechat/WxPay/realpay/success_notify_wechat_shop.php';//回调地址
-
- /**
- * Function Description:去微信下单并获取返回值
- * Function Name: unifiedOrderByOrderId
- * @param $order_id
- *
- * @return array
- *
- * @author 倪宗锋
- */
- public function unifiedOrderByOrderId($order_id)
- {
- $orderMain = new OrderMain();
- $result = $orderMain->getUnifiedParamsByOrderId($order_id);//通过订单ID获取需要的微信支付参数
- if ($result['flag'] == false) {
- return $result;
- }
- $data = array(
- 'line_name' => $result['data']['line_name'],//线路名称
- 'order_id' => $order_id,//订单ID
- 'total_fee' => $result['data']['total_fee'],//总金额
- );
- $wxPayService = new WxPayService();
- $getPrepayId = $wxPayService->unifiedOrder($data);//统一下单API
- if ($getPrepayId['flag'] == false) {
- return $getPrepayId;
- }
- //设置成功返回的结果数据
- $wxPayConfig = Util::getWxPayConfig();
- $return = array(
- 'appid' => $wxPayConfig['appid'],//微信开放平台审核通过的应用APPID
- 'prepay_id' => $getPrepayId['prepay_id'],//微信返回的支付交易会话ID
- 'partnerid' => $wxPayConfig['mch_id'],//微信支付分配的商户号
- 'package ' => 'Sign=WXPay',//扩展字段 暂填写固定值Sign=WXPay
- 'noncestr' => WxPayService::getNonceStr(),//随机字符串
- 'timestamp' => time(),//当前时间戳
- );
- $return['sign'] = WxPayService::getSign($return);
- return Util::returnArrSu('', $return);
- }
-
- /**
- * Function Description:统一下单API
- * Function Name: unifiedOrder
- * @param $params array
- * attach 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
- * line_name 线路名称
- * order_id 订单ID
- * total_fee 总金额
- * notify_url 回调地址
- *
- * @return array
- *
- * @author 倪宗锋
- */
- public function unifiedOrder($params)
- {
- $siteConfig = Util::getSiteConfig();
- $wxPayConfig = Util::getWxPayConfig();
- $data = array(
- 'appid' => $wxPayConfig['appid'],//微信开放平台审核通过的应用APPID
- 'attach' => empty($params['attach']) ? '' : $params['attach'],
- 'body' => $params['line_name'] . ": " . $params['order_id'],//线路名称 加 上订单ID
- 'mch_id' => $wxPayConfig['mch_id'],//商户号 微信支付分配的商户号
- 'nonce_str' => $this->getNonceStr(),//随机字符串
- 'notify_url' => empty($params['notify_url']) ? $siteConfig['host_name'] . $this->notify_url : $params['notify_url'],//通知地址
- 'out_trade_no' => $params['order_id'] . "-" . date("ymdHis"),//商户订单ID加上当前时间
- 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],//用户端实际ip
- 'total_fee' => $params['total_fee'],//订单总金额,单位为分
- 'trade_type' => 'APP',//交易类型
- );
- $data['sign'] = $this->getSign($data);//交易签名
- $curl = new CurlInterface($data, 2);//函数类
- $curl->setBaseUrl($this->unifiedOrderUrl);
- $result = $curl->execute('', 'POST');
- if (empty($result['prepay_id'])) {
- return Util::returnArrEr('预支付交易会话异常!');
- }
- return Util::returnArrSu('', array('prepay_id' => $result['prepay_id']));
- }
-
-
- /**
- * Function Description:获取签名
- * Function Name: getSign
- * @param $params
- * @param $type int 配置类型
- *
- * @return string
- *
- * @author 倪宗锋
- */
- public static function getSign($params)
- {
- if (isset($params['sign'])) {
- unset($params['sign']);
- }
- $config = Util::getWxPayConfig();
- //签名步骤一:按字典序排序参数
- ksort($params);
- $string = self::ToUrlParams($params);
- //签名步骤二:在string后加入KEY
- $string = $string . "&key=" . $config['key'];
- //签名步骤三:MD5加密
- $string = md5($string);
- //签名步骤四:所有字符转为大写
- $result = strtoupper($string);
- return $result;
-
- }
-
- /**
- * Function Description:格式化参数 格式化成url参数
- * Function Name: ToUrlParams
- * @param $params
- *
- * @return string
- *
- * @author 倪宗锋
- */
- public static function ToUrlParams($params)
- {
- $buff = "";
- foreach ($params as $k => $v) {
- if ($k != "sign" && $v != "" && !is_array($v)) {
- $buff .= $k . "=" . $v . "&";
- }
- }
- $buff = trim($buff, "&");
- return $buff;
- }
-
- /**
- * Function Description:产生的随机字符串 不长于32位
- * Function Name: getNonceStr
- * @param int $length
- *
- * @return string
- *
- * @author 倪宗锋
- */
- public static function getNonceStr($length = 32)
- {
- $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
- $str = "";
- for ($i = 0; $i < $length; $i++) {
- $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
- }
- return $str;
- }
- }
|