头像

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

2018-05-09 14:40:47 来源:PHP代码   浏览()   评论 ( 0 )   

<?php
namespace Com;
class ComPay {
//证书
private $apiclient_cert = '';
private $apiclient_key = '';
//pay的秘钥值
private $apikey = "";
//错误信息
private $error = '';
private $mchid = '';//商户号
private $mchappid = '';//公众号
private $openid = '';//接收者openid
private $amount = 100;//金额
private $partnertradeno = '';//订单号
private $spbillcreateip = '';//触发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()) return;
$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<100){
$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;
}
}
}


标签: php
声明:转载请注明来源(PHP代码)并保留原文链接:http://www.phpdaima.com//master-108.html
广告不存在
评论0

后面还有条评论,点击查看>>

温馨提示:为规范评论内容,垃圾评论一律封号...