123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- <?php
- namespace weixin;
- class Wxpay
- {
- protected $WxPayConfig=array();
- public function __construct()
- {
- $this->WxPayConfig=array(
- 'APPID'=>sysconfig('wchat.wxmini_user_appid'),
- 'MCHID'=>sysconfig('wchat.wxmini_user_mchid'),
- 'KEY'=>sysconfig('wchat.wxmini_user_paysecret'),
- 'SSLCERT_PATH'=>dirname(__FILE__).'/cert/apiclient_cert.pem',
- 'SSLKEY_PATH'=>dirname(__FILE__).'/cert/apiclient_key.pem',
- 'NOTIFY_URL'=> $_SERVER['REQUEST_SCHEME']."://".$_SERVER['HTTP_HOST'].sysconfig('wchat.notify_url'),
- 'wapurl' => sysconfig('wchat.wapurl'),
- );
- }
-
-
-
- public function H5Pay($oid,$amount,$body='微信H5支付')
- {
- $wapurl=$this->WxPayConfig['wapurl'];
- $notify_url=$this->WxPayConfig['NOTIFY_URL'];
- $scene_info='{"h5_info":{"type": "wap","wap_url": "'.$wapurl.'","wap_name": "'.$body.'"}}';
- $nonce_str=GetRandStr(32);
- $URL='https://api.mch.weixin.qq.com/pay/unifiedorder';
- $order['appid']=$this->WxPayConfig['APPID'];
- $order['mch_id']=$this->WxPayConfig['MCHID'];
- $order['device_info']='WEB';
- $order['nonce_str']=$nonce_str;
- $order['sign_type']='MD5';
- $order['body']=$body;
- $order['out_trade_no']=$oid;
- $order['total_fee']=$amount*100;
- $order['spbill_create_ip']=GetIP();
- $order['time_start']=date("YmdHis");
- $order['time_expire']=date("YmdHis", time() + 600);
- $order['notify_url']=$notify_url;
- $order['trade_type']='MWEB';
- $order['scene_info']=$scene_info;
- $Sign_Data=$order;
- $sign=Wxcommon::MakeSign_MD5($Sign_Data,$this->WxPayConfig['KEY']);
- $order['sign']=$sign;
- $xml=Wxcommon::ToXml($order);
- $result=Wxcommon::postXmlCurl($xml,$URL);
- $result=XmlToArray($result);
- if(!isset($result['prepay_id'])){
- return $result['return_msg'];
- }
- $prepay_id=$result['prepay_id'];
- $trade_type=$result['MWEB'];
- WLog('WxPay_H5','请求:'.array2string($order));
- WLog('WxPay_H5','响应:'.array2string($result));
- if(isset($result['mweb_url'])){
- return $result['mweb_url'];
- }else{
- return $result['return_msg'];
- }
- }
-
-
- public function NativePay($oid,$amount,$body='微信扫码支付')
- {
- $notify_url=$this->WxPayConfig['NOTIFY_URL'];
- $nonce_str=GetRandStr(16);
- $URL='https://api.mch.weixin.qq.com/pay/unifiedorder';
- $order['appid']=$this->WxPayConfig['APPID'];
- $order['mch_id']=$this->WxPayConfig['MCHID'];
- $order['device_info']='WEB';
- $order['nonce_str']=$nonce_str;
- $order['sign_type']='MD5';
- $order['body']=$body;
- $order['out_trade_no']=$oid;
- $order['total_fee']=$amount*100;
- $order['spbill_create_ip']=GetIP();
- $order['time_start']=(date("YmdHis"));
- $order['time_expire']=(date("YmdHis", time() + 600));
- $order['notify_url']=$notify_url;
- $order['trade_type']='NATIVE';
- $Sign_Data=$order;
- $sign=Wxcommon::MakeSign_MD5($Sign_Data,$this->WxPayConfig['KEY']);
- $order['sign']=$sign;
- $xml=Wxcommon::ToXml($order);
- $result=Wxcommon::postXmlCurl($xml,$URL);
- $result=XmlToArray($result);
-
- WLog('WxPay_Native','请求:'.$this->WxPayConfig['KEY'].array2string($order));
- WLog('WxPay_Native','响应:'.array2string($result));
-
- return $result;
- }
-
-
- public function JsApiPay($oid,$amount,$openid,$body='微信公众号支付')
- {
- $notify_url=$this->WxPayConfig['NOTIFY_URL'];
- $nonce_str=GetRandStr(32);
- $URL='https://api.mch.weixin.qq.com/pay/unifiedorder';
- $order['appid']=$this->WxPayConfig['APPID'];
- $order['mch_id']=$this->WxPayConfig['MCHID'];
- $order['device_info']='WEB';
- $order['nonce_str']=$nonce_str;
- $order['sign_type']='MD5';
- $order['body']=$body;
- $order['out_trade_no']=$oid;
- $order['total_fee']=$amount*100;
- $order['spbill_create_ip']=GetIP();
- $order['time_start']=date("YmdHis");
- $order['time_expire']=date("YmdHis", time() + 600);
- $order['notify_url']=$notify_url;
- $order['trade_type']='JSAPI';
- $order['openid']=$openid;
- $Sign_Data=$order;
- $sign=Wxcommon::MakeSign_MD5($Sign_Data,$this->WxPayConfig['KEY']);
- $order['sign']=$sign;
- $xml=Wxcommon::ToXml($order);
- $result=Wxcommon::postXmlCurl($xml,$URL);
- $result=XmlToArray($result);
- WLog('WxPay_JsApi','请求:'.array2string($order));
- WLog('WxPay_JsApi','响应:'.array2string($result));
-
- $nonce_str=GetRandStr(32);
- $arr['appId']=$this->WxPayConfig['APPID'];
- $arr['timeStamp']=''.time().'';
- $arr['nonceStr']=$nonce_str;
- if(!isset($result['prepay_id'])){
- return $result['return_msg'];
- }
- $arr['package']="prepay_id=".$result['prepay_id'];
- $arr['signType']="MD5";
- $sign=Wxcommon::MakeSign_MD5($arr,$this->WxPayConfig['KEY']);
- $arr['paySign']=$sign;
- WLog('WxPay_JsApi','JsApi发起参数:'.array2string($arr));
- return $arr;
- }
-
-
- public function SendRedPack($openid,$amount,$send_name,$wishing="恭喜发财",$act_name='红包活动')
- {
- $nonce_str=GetRandStr(32);
- $mch_billno=time().mt_rand(1000000,9999999);
- $URL='https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
- $order['wxappid']=$this->WxPayConfig['APPID'];
- $order['mch_id']=$this->WxPayConfig['MCHID'];
- $order['nonce_str']=$nonce_str;
- $order['re_openid']=$openid;
- $order['send_name']=$send_name;
- $order['wishing']=$wishing;
- $order['act_name']=$act_name;
- $order['mch_billno']=$mch_billno;
- $order['total_amount']=$amount*100;
- $order['total_num']=1;
- $order['client_ip']=GetIP();
- $Sign_Data=$order;
- $sign=Wxcommon::MakeSign_MD5($Sign_Data,$this->WxPayConfig['KEY']);
- $order['sign']=$sign;
- $xml=Wxcommon::ToXml($order);
- $SSLCERT_PATH =$this->WxPayConfig['SSLCERT_PATH'];
- $SSLKEY_PATH =$this->WxPayConfig['SSLKEY_PATH'];
- $result=Wxcommon::postXmlCurl($xml,$URL,$SSLCERT_PATH,$SSLKEY_PATH);
- $result=XmlToArray($result);
- WLog('WxSendRedPack_Request_Api','请求:'.array2string($order));
- WLog('WxSendRedPack_Request_Api','响应:'.array2string($result));
- return $result;
- }
-
-
- public function Refund($transaction_id,$amount,$total,$body='商品已售完')
- {
- $nonce_str=GetRandStr(32);
- $out_refund_no=time().mt_rand(1000000,9999999);
- $URL='https://api.mch.weixin.qq.com/secapi/pay/refund';
- $order['appid']=$this->WxPayConfig['APPID'];
- $order['mch_id']=$this->WxPayConfig['MCHID'];
- $order['nonce_str']=$nonce_str;
- $order['sign_type']='MD5';
- $order['refund_desc']=$body;
- $order['transaction_id']=$transaction_id;
- $order['out_refund_no']=$out_refund_no;
- $order['total_fee']=$total*100;
- $order['refund_fee']=$amount*100;
- $Sign_Data=$order;
- $sign=Wxcommon::MakeSign_MD5($Sign_Data,$this->WxPayConfig['KEY']);
- $order['sign']=$sign;
- $xml=Wxcommon::ToXml($order);
- $SSLCERT_PATH =$this->WxPayConfig['SSLCERT_PATH'];
- $SSLKEY_PATH =$this->WxPayConfig['SSLKEY_PATH'];
- $result=Wxcommon::postXmlCurl($xml,$URL,$SSLCERT_PATH,$SSLKEY_PATH);
- $result=XmlToArray($result);
- WLog('WxRefund_Api','请求:'.array2string($order));
- WLog('WxRefund_Api','响应:'.array2string($result));
- return $result;
- }
-
-
- public function Rransfers($partner_trade_no,$openid,$amount,$body='佣金打款')
- {
- $nonce_str=GetRandStr(32);
- $URL='https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
- $order['mch_appid']=$this->WxPayConfig['APPID'];
- $order['mchid']=$this->WxPayConfig['MCHID'];
- $order['nonce_str']=$nonce_str;
- $order['openid']=$openid;
- $order['check_name']='NO_CHECK';
- $order['desc']=$body;
- $order['partner_trade_no']=$partner_trade_no;
- $order['amount']=$amount*100;
- $order['spbill_create_ip']=GetIP();
- $Sign_Data=$order;
- $sign=Wxcommon::MakeSign_MD5($Sign_Data,$this->WxPayConfig['KEY']);
- $order['sign']=$sign;
- $xml=Wxcommon::ToXml($order);
- $SSLCERT_PATH =$this->WxPayConfig['SSLCERT_PATH'];
- $SSLKEY_PATH =$this->WxPayConfig['SSLKEY_PATH'];
- $result=Wxcommon::postXmlCurl($xml,$URL,$SSLCERT_PATH,$SSLKEY_PATH);
- $result=XmlToArray($result);
- WLog('WxRransfers_Api','请求:'.array2string($order));
- WLog('WxRransfers_Api','响应:'.array2string($result));
- return $result;
- }
-
-
- public function Callback_SignCheck($order)
- {
- $sign=$order['sign'];
- unset($order['sign']);
- $sign2=Wxcommon::MakeSign_MD5($order,$this->WxPayConfig['KEY']);
- if($sign==$sign2){
- return true;
- }else{
- return false;
- }
- }
-
-
- public function Return_Result($status,$msg)
- {
- $data['return_code']=$status;
- $data['return_msg']=$msg;
- return Wxcommon::ToXml($data);
- }
- }
- ?>
|