php实现微信原生支付(扫码支付)功能
网上的很多PHP微信扫码支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,只有200行代码,希望可以给各位想接入微信扫码支付的带来些许帮助和借鉴意义。
直接运行该文件即可得到一个支付二维码的图片。
需要注意的事项:
1.该文件需放到支付授权目录下,可以在微信支付商户平台->产品中心->开发配置中设置。
2.如提示签名错误可以通过微信支付签名验证工具进行验证:微信公众平台支付接口调试工具
代码如下:
createJsBizPackage($payAmount,$outTradeNo,$orderName,$notifyUrl,$payTime); //生成二维码 $url='http://qr.liantu.com/api.php?text='.$arr['code_url']; echo""; classWxpayService { protected$mchid; protected$appid; protected$apiKey; publicfunction__construct($mchid,$appid,$key) { $this->mchid=$mchid; $this->appid=$appid; $this->apiKey=$key; } /** *发起订单 *@paramfloat$totalFee收款总费用单位元 *@paramstring$outTradeNo唯一的订单号 *@paramstring$orderName订单名称 *@paramstring$notifyUrl支付结果通知url不要有问号 *@paramstring$timestamp订单发起时间 *@returnarray */ publicfunctioncreateJsBizPackage($totalFee,$outTradeNo,$orderName,$notifyUrl,$timestamp) { $config=array( 'mch_id'=>$this->mchid, 'appid'=>$this->appid, 'key'=>$this->apiKey, ); $orderName=iconv('GBK','UTF-8',$orderName); $unified=array( 'appid'=>$config['appid'], 'attach'=>'pay',//商家数据包,原样返回,如果填写中文,请注意转换为utf-8 'body'=>$orderName, 'mch_id'=>$config['mch_id'], 'nonce_str'=>self::createNonceStr(), 'notify_url'=>$notifyUrl, 'out_trade_no'=>$outTradeNo, 'spbill_create_ip'=>'127.0.0.1', 'total_fee'=>intval($totalFee*100),//单位转为分 'trade_type'=>'NATIVE', ); $unified['sign']=self::getSign($unified,$config['key']); $responseXml=self::curlPost('https://api.mch.weixin.qq.com/pay/unifiedorder',self::arrayToXml($unified)); $unifiedOrder=simplexml_load_string($responseXml,'SimpleXMLElement',LIBXML_NOCDATA); if($unifiedOrder===false){ die('parsexmlerror'); } if($unifiedOrder->return_code!='SUCCESS'){ die($unifiedOrder->return_msg); } if($unifiedOrder->result_code!='SUCCESS'){ die($unifiedOrder->err_code); } $codeUrl=(array)($unifiedOrder->code_url); if(!$codeUrl[0])exit('getcode_urlerror'); $arr=array( "appId"=>$config['appid'], "timeStamp"=>$timestamp, "nonceStr"=>self::createNonceStr(), "package"=>"prepay_id=".$unifiedOrder->prepay_id, "signType"=>'MD5', "code_url"=>$codeUrl[0], ); $arr['paySign']=self::getSign($arr,$config['key']); return$arr; } publicfunctionnotify() { $config=array( 'mch_id'=>$this->mchid, 'appid'=>$this->appid, 'key'=>$this->apiKey, ); $postStr=$GLOBALS["HTTP_RAW_POST_DATA"]; $postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA); if($postObj===false){ die('parsexmlerror'); } if($postObj->return_code!='SUCCESS'){ die($postObj->return_msg); } if($postObj->result_code!='SUCCESS'){ die($postObj->err_code); } $arr=(array)$postObj; unset($arr['sign']); if(self::getSign($arr,$config['key'])==$postObj->sign){ echo' '; return$postObj; } } /** *curlget * *@paramstring$url *@paramarray$options *@returnmixed */ publicstaticfunctioncurlGet($url='',$options=array()) { $ch=curl_init($url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if(!empty($options)){ curl_setopt_array($ch,$options); } //https请求不验证证书和host curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); $data=curl_exec($ch); curl_close($ch); return$data; } publicstaticfunctioncurlPost($url='',$postData='',$options=array()) { if(is_array($postData)){ $postData=http_build_query($postData); } $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$postData); curl_setopt($ch,CURLOPT_TIMEOUT,30);//设置cURL允许执行的最长秒数 if(!empty($options)){ curl_setopt_array($ch,$options); } //https请求不验证证书和host curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); $data=curl_exec($ch); curl_close($ch); return$data; } publicstaticfunctioncreateNonceStr($length=16) { $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $str=''; for($i=0;$i<$length;$i++){ $str.=substr($chars,mt_rand(0,strlen($chars)-1),1); } return$str; } publicstaticfunctionarrayToXml($arr) { $xml=" "; foreach($arras$key=>$val){ if(is_numeric($val)){ $xml.="<".$key.">".$val."".$key.">"; }else $xml.="<".$key.">".$key.">"; } $xml.=" "; return$xml; } /** *获取签名 */ publicstaticfunctiongetSign($params,$key) { ksort($params,SORT_STRING); $unSignParaString=self::formatQueryParaMap($params,false); $signStr=strtoupper(md5($unSignParaString."&key=".$key)); return$signStr; } protectedstaticfunctionformatQueryParaMap($paraMap,$urlEncode=false) { $buff=""; ksort($paraMap); foreach($paraMapas$k=>$v){ if(null!=$v&&"null"!=$v){ if($urlEncode){ $v=urlencode($v); } $buff.=$k."=".$v."&"; } } $reqPar=''; if(strlen($buff)>0){ $reqPar=substr($buff,0,strlen($buff)-1); } return$reqPar; } }
github下载地址:weixinPay
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。