微信红包,企业支付完整命名空间版

<?php
namespace Com;



class WeixinPay {
    //证书
    private $apiclient_cert = 'E:\phpStudy\WWW\test002\qiniu\weixin\cert\apiclient_cert.pem';
    private $apiclient_key = 'E:\phpStudy\WWW\test002\qiniu\weixin\cert\apiclient_key.pem';
    //pay的秘钥值
    private $apikey = "apikey12345678910123456";//--
    //错误信息
    private $error = '';

    private $mchid = '13812345678';//商户号--
    private $mchappid = 'wxabcd123456adf';//公众号--
    private $openid = 'sdf216asdffwe6';//接收者openid--
    private $amount = 100;//金额--
    private $partnertradeno = '1646542164a66';//订单号
    private $spbillcreateip = '120.26.36.15';//触发ip
    private $checkname = 'NO_CHECK';//校验要求

    private $sendname = '发送者名字';
    private $wishing = '祝福语';
    private $actname = '活动名称';
    private $remark = '有钱,任性';

    private $totalnum =3;
    private $amttype ='ALL_RAND';

    //裂变红包
    private $api_group = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack";
    //普通红包
    private $api_single = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
    //企业支付
    private $api_compay = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
    //约包查询
    private $api_redbag_select = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo";
    //企业支付查询
    private $api_compay_select = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo";


    /**
     *公用-支付用商户号
     *@var string
     */
    public function setMchid($mchid){
        $this->mchid = $mchid;
    }
    /**
     *公用-pay的秘钥值
     *@var string
     */
    public function setApiKey($apikey){
        $this->apikey = $apikey;
    }


    /**
     *企业支付用微信公众号
     *@var string
     */
    public function setMchAppid($mchappid){
        $this->mchappid = $mchappid;
    }
    /**
     *企业支付接收用户openid
     *@var string
     */
    public function setOpenid($openid){
        $this->openid = $openid;
    }

    /**
     *企业支付金额
     *@var integer
     */
    public function setAmount($amount){
        $this->amount = $amount;
    }
    /**
     *企业支付描述
     *@var string
     */
    public function setDesc($desc){
        $this->remark = $desc;
    }

    /**
     *企业支付订单号
     *@var string
     */
    public function setPartnerTradeNo($partnertradeno){
        $this->partnertradeno = $partnertradeno;
    }
    /**
     *企业支付触发ip
     *@var string
     */
    public function setSpbillCreateIp($spbillcreateip){
        $this->spbillcreateip = $spbillcreateip;
    }
    /**
     *企业支付校验规则
     *@var string
     */
    public function setCheckName($checkname){
        $this->checkname = $checkname;
    }

    /**
     *红包支付公众号
     *@var string
     */
    public function setWxappid($wxappid){
        $this->mchappid = $wxappid;
    }
    /**
     *红包支付订单号
     *@var string
     */
    public function setMchBillNo($mchbillno){
        $this->partnertradeno = $mchbillno;
    }
    /**
     *红包支付触发ip
     *@var string
     */
    public function setClientIp($clientip){
        $this->spbillcreateip = $clientip;
    }
    /**
     *红包接收者/裂一变红包的种子接收者
     *@var string
     */
    public function setReOpenid($reopenid){
        $this->openid = $reopenid;
    }
    /**
     *红包支付金额
     *@var integer
     */
    public function setTotalAmount($totalamount){
        $this->amount = $totalamount;
    }
    /**
     *红包支付公众号
     *@var string
     */
    public function setSendName($sendname){
        $this->sendname = $sendname;
    }
    /**
     *红包支祝福语
     *@var string
     */
    public function setWishing($wishing){
        $this->wishing = $wishing;
    }
    /**
     *红包支付活动名称
     *@var string
     */
    public function setActName($actname){
        $this->actname = $actname;
    }
    /**
     *红包支付备注信息
     *@var string
     */
    public function setRemark($remark){
        $this->remark = $remark;
    }
    /**
     *红包支付个数-裂变专用
     *@var string
     */
    public function setTotalNum($totalnum){
        $this->totalnum = $totalnum;
    }

    public function setAppId($appid){
        $this->mchappid = $appid;
    }
    /**
     *错误反馈
     *@return string
     */
    public function error(){
        return $this->error;
    }

    /**
     *普通红包支付
     *@return boolean
     */
    public function RedBag(){
        if(!$this->inited()) return;
        $obj = array();
        $obj['wxappid'] = $this->mchappid;
        $obj['mch_id'] = $this->mchid;
        $obj['mch_billno'] = $this->partnertradeno;
        $obj['client_ip'] = $this->spbillcreateip;
        $obj['re_openid'] = $this->openid;
        $obj['total_amount'] = $this->amount;
        $obj['total_num'] = 1;
        $obj['send_name'] = $this->sendname;
        $obj['wishing'] = $this->wishing;
        $obj['act_name'] = $this->actname;
        $obj['remark'] = $this->remark;
        $url = $this->api_single;
        return $this->Pay($url,$obj);
    }



    /**
     *裂变红包支付
     *@return boolean
     */
    public function RedBagGroup(){
        if(!$this->inited()) return;
        $obj = array();
        $obj['wxappid'] = $this->mchappid;
        $obj['mch_id'] = $this->mchid;
        $obj['mch_billno'] = $this->partnertradeno;
        $obj['re_openid'] = $this->openid;
        $obj['total_amount'] = $this->amount;
        $obj['total_num'] = $this->totalnum;
        $obj['amt_type'] = $this->amttype;
        $obj['send_name'] = $this->sendname;
        $obj['wishing'] = $this->wishing;
        $obj['act_name'] = $this->actname;
        $obj['remark'] = $this->remark;
        $url = $this->api_single;
        return $this->Pay($url,$obj);
    }
    /**
     *企业支付
     *@return boolean
     */
    public function ComPay(){
        if(!$this->inited()){
            echo "not inited";
            die;
//            return 0;
        }



        $obj = array();
        $obj['openid'] = $this->openid;
        $obj['amount'] = $this->amount;
        $obj['desc'] = $this->remark;
        $obj['mch_appid'] = $this->mchappid;
        $obj['mchid'] = $this->mchid;
        $obj['partner_trade_no'] = $this->partnertradeno;
        $obj['spbill_create_ip'] = $this->spbillcreateip;
        $obj['check_name'] = $this->checkname;
        $url = $this->api_compay;
        return $this->Pay($url,$obj);
    }
    /**
     *红包查询
     *@return array
     */
    public function BagSelect(){
        $this->license();
        $obj = array();
        $obj['appid'] = $this->mchappid;
        $obj['mch_id'] = $this->mchid;
        $obj['mch_billno'] = $this->partnertradeno;
        $obj['bill_type'] = 'MCHT';
        $url = $this->api_redbag_select;
        return $this->Pay($url,$obj);
    }
    /**
     *企业支付查询
     *@return array
     */
    public function ComPaySelect(){
        $this->license();
        $obj = array();
        $obj['appid'] = $this->mchappid;
        $obj['mch_id'] = $this->mchid;
        $obj['partner_trade_no'] = $this->partnertradeno;
        $url = $this->api_compay_select;
        return $this->Pay($url,$obj);
    }

    /**
     *支付前准备
     *@return boolean
     */
    private function inited(){
        $inited = true;
        $amount = $this->amount;
        if(!is_numeric($amount)){
            $this->error = "金额参数错误";
            $inited = false;
        }elseif($amount<1){
            $this->error = "金额太小";
            $inited = false;
        }elseif($amount>20000){
            $this->error = "金额太大";
            $inited = false;
        }
        if(!$this->partnertradeno){
            $this->partnertradeno = $this->GenBillNo();
        }
        if(!$this->spbillcreateip)
            $this->spbillcreateip = $_SERVER['REMOTE_ADDR'];

        $this->license();


        return $inited;
    }
    /**
     *证书初始化
     *放在同目录 cacert/文件夹下
     */
    private function license(){
        if(!$this->apiclient_cert)
            $this->apiclient_cert = dirname(__FILE__)."/cacert/apiclient_cert.pem";
        if(!$this->apiclient_key)
            $this->apiclient_key = dirname(__FILE__)."/cacert/apiclient_key.pem";
    }

    /**
     *生在订单号
     *@return boolean
     */
    private function GenBillNo(){
        $rnd_num = array('0','1','2','3','4','5','6','7','8','9');
        $rndstr = "";
        while(strlen($rndstr)<10){
            $rndstr .= $rnd_num[array_rand($rnd_num)];
        }

        return $this->mchid.date("Ymd").$rndstr;
    }

    /**
     *完成支付操作
     *@url string
     *@obj array
     *@return boolean
     */
    private function Pay($url,$obj){
        $obj['nonce_str'] = $this->create_noncestr();
        $sign = $this->getSign($obj);
        $obj['sign'] = $sign;
        $postXml = $this->arrayToXml($obj);
        $responseXml = $this->CurlPostSsl($url,$postXml);
        return $responseXml;
    }
    /**
     *创建随机字串
     *@return string
     */
    private function create_noncestr($length = 32){
        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        $str = '';
        for ($i = 0; $i <$length; $i++){
            $str .= substr($chars,mt_rand(0,strlen($chars)-1),1);
        }
        return $str;
    }
    /**
     *创建签名
     *@return string
     */
    private function getSign($arr){
        ksort($arr); //按照键名排序
        $sign_raw = '';
        foreach($arr as $k => $v){
            $sign_raw .= $k.'='.$v.'&';
        }
        $sign_raw .= 'key='.$this->apikey;

        return strtoupper(md5($sign_raw));
    }

    /**
     * WXHongBao::genXMLParam()
     * 生成post的参数xml数据包
     * @return $xml
     */
    private function arrayToXml($arr){
        $xml ="<xml>";
        foreach ($arr as $key => $val) {
            if (is_numeric($val)) {
                $xml .= "<".$key.">".$val."</".$key.">";
            }else{
                $xml .= "<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml .= "</xml>";
        return $xml;
    }

    /**
     * curl提交
     * @return $boolean
     */
    private function CurlPostSsl($url,$xml,$second = 10){
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_TIMEOUT,$second);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

        curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
        curl_setopt($ch,CURLOPT_SSLCERT,$this->apiclient_cert);
        curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
        curl_setopt($ch,CURLOPT_SSLKEY,$this->apiclient_key);
        curl_setopt($ch,CURLOPT_POST, 1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
        $data = curl_exec($ch);
        if($data){
            curl_close($ch);
            $rsxml = simplexml_load_string($data);
            if($rsxml->return_code == 'SUCCESS' ){
                return $data;
            }else{
                $this->error = $rsxml->return_msg;
                return false;
            }
        }else{
            $this->error = curl_errno($ch);
            curl_close($ch);
            return false;
        }
    }





}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值