Service.php 3.22 KB
<?php

namespace WebPlugin\Pay\Wechatqrcode;

use WebPlugin\Pay\PayAbstract;
use WebPlugin\Pay\Reqparams;
use WebPlugin\Pay\Rspparams;
use WebPlugin\Pay\Signature;

class Service extends PayAbstract
{

    private $config;
    private $orderCode;
    private $paymentCode;
    private $appKey;
    private $privateKey;
    private $payCurl;

    public function __construct(array $paymentParams) {
        $this->logProjectPrefix = 'wechatpay';
        $this->config = new Config();
        $environParam = 'pay_'.APPLICATION_ENV.'_url';
        $this->payCurl = $this->config->$environParam;
        $this->appKey = $this->config->app_key;
        $this->privateKey = $this->config->private_key;
        $this->paymentCode = $paymentParams['id'];
    }

    public function getPayRequestPars(Reqparams $params) {
        $this->orderCode = $params->orderCode;
        $result = array(
            'pay_url' => $this->config->payment_url,
            'pars' => 'order_code=' . $this->orderCode . '&payment_code=' . $this->paymentCode,
            'reqType' => 'get'
        );
        return $result;
    }

    /**
     * 微信支付页
     * @param array $orderInfo
     * @return string
     * @internal param array $orderCode
     */
    public function pay(array $orderInfo) {
        //生成签名
        $this->orderCode = $orderInfo['order_code'];
        $payParams = array(
            'order_code' => $this->orderCode,
            'app_key' => $this->appKey,
            'payment_code' => $this->paymentCode,
            'private_key' => $this->privateKey
        );
        $_params = Signature::packageSort($payParams);
        $client_secret = Signature::makeSign($_params);
        $parameter = array(
            'order_code' => $this->orderCode,
            'app_key' => $this->appKey,
            //这里payment.yoho_pay表与payment.q_pay表数据需一致
            'payment_code' => $this->paymentCode,
            'client_secret' => $client_secret,
            'client' => 'web'
        );
        $pars = '';
        foreach ($parameter as $p_key => $p_val) {
            $pars.=$p_key . '=' . urlencode($p_val) . '&';
        }
        $payUrlInfo = array(
            'pay_url' => $this->payCurl,
            'pars' => trim($pars, '&')
        );
        $payUrl = $payUrlInfo['pay_url'] . '?' . $payUrlInfo['pars'];
        return array('pay_url' => $payUrl);
    }

    public function parseResponse(array $arrResponse) {
        /* 返回示例
         * http://www.yohobuy.com/pay/notice/wechatqrcodereturn?ordercode=93465435
         */
        $rsp = new Rspparams();
        if($arrResponse['payResult'] == 200){
            $rsp->payResult = 200;
            $rsp->bankName = "WX";
            $rsp->orderCode = $arrResponse['order_code'];
            $rsp->payTime = $arrResponse["arrive_time"];
            $rsp->totalFee = $arrResponse["amount"];
            $rsp->resultMsg = '支付成功';
            //添加支付订单号和交易号
            $rsp->payOrderCode = $arrResponse["order_code"];
            $rsp->tradeNo = "";
            $rsp->bankBillNo = "";
        }else{
            $rsp->payResult = -1;
        }
        return $rsp;
    }

}