6g下载网
当前位置: 主页 > 软件教程 > 编程开发 >

php代码生成微信支付二维码源代码

时间: 2016-01-18 21:24 来源: 6g下载网

分享到:

php代码生成微信支付二维码源代码。程序执行思路:首先生成微信支付链接,然后转换成二维码。希望能给大家提供帮助。

  1.  
  2. <?php 
  3.  
  4.  
  5. if (!defined('IN_ECS'))  
  6. {  
  7.     die('Hacking attempt');  
  8. }  
  9.  
  10. $payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/wxpay.php';  
  11.  
  12. if (file_exists($payment_lang))  
  13. {  
  14.     global $_LANG;  
  15.  
  16.     include_once($payment_lang);  
  17. }  
  18.  
  19. /* 模块的基本信息 */  
  20. if (isset($set_modules) && $set_modules == TRUE)  
  21. {  
  22.     $i = isset($modules) ? count($modules) : 0;  
  23.  
  24.     /* 代码 */  
  25.     $modules[$i]['code']    = basename(__FILE__, '.php');  
  26.  
  27.     /* 描述对应的语言项 */  
  28.     $modules[$i]['desc']    = 'wxpay_desc';  
  29.  
  30.     /* 是否支持货到付款 */  
  31.     $modules[$i]['is_cod']  = '0';  
  32.  
  33.     /* 是否支持在线支付 */  
  34.     $modules[$i]['is_online']  = '1';  
  35.  
  36.     /* 作者 */  
  37.     $modules[$i]['author']  = 'Admin';  
  38.  
  39.     /* 网址 */  
  40.     $modules[$i]['website'] = 'weixin://wxpay/bizpayurl?';  
  41.  
  42.     /* 版本号 */  
  43.     $modules[$i]['version'] = '1.0.1';  
  44.  
  45.     /* 配置信息 */  
  46.     $modules[$i]['config']  = array(  
  47.         array('name' => 'wxpay_appid',         'type' => 'text',   'value' => ''),  
  48.         array('name' => 'wxpay_appsecret',     'type' => 'text',   'value' => ''),          
  49.         array('name' => 'wxpay_mch_id',        'type' => 'text',   'value' => ''),  
  50.         array('name' => 'wxpay_key',           'type' => 'text',   'value' => ''),  
  51.     );  
  52.  
  53.     return;  
  54. }  
  55.  
  56. /**  
  57.  * 类  
  58.  */  
  59. class wxpay  
  60. {  
  61.  
  62.     /**  
  63.      * 构造函数  
  64.      *  
  65.      * @access  public  
  66.      * @param  
  67.      *  
  68.      * @return void  
  69.      */  
  70.     function wxpay()  
  71.     {  
  72.     }  
  73.  
  74.     function __construct()  
  75.     {  
  76.         $this->wxpay();  
  77.     }  
  78.  
  79.     /**  
  80.      * 生成支付代码  
  81.      * @param   array   $order      订单信息  
  82.      * @param   array   $payment    支付方式信息  
  83.      */  
  84.     function get_code($order, $payment)  
  85.     {  
  86.         if (!defined('EC_CHARSET'))  
  87.         {  
  88.             $charset = 'utf-8';  
  89.         }  
  90.         else  
  91.         {  
  92.             $charset = EC_CHARSET;  
  93.         }  
  94.           
  95.         $site_url='https://api.mch.weixin.qq.com/pay/unifiedorder';//'weixin://wxpay/bizpayurl?';  
  96.           
  97.         //支付参数  
  98.         $parameter = array(  
  99.             'appid'         => $payment['wxpay_appid'],  
  100.             'mch_id'        => $payment['wxpay_mch_id'],          
  101.             'device_info'   => 'WEB',  
  102.             'nonce_str'     => $this->set_random(32),          
  103.             'body'          => 'goods',  
  104.             'out_trade_no'  => $order['order_sn'].$order['log_id'],  
  105.             'fee_type'      => 'CNY',  
  106.             'total_fee'     => $order['order_amount']*100,  
  107.             'spbill_create_ip'=> real_ip(),  
  108.             'notify_url'    => $GLOBALS['ecs']->url(). 'respond.php?code=wxpay',//wxpay_respond.php?code=wxpay 
  109.             'trade_type'    => 'NATIVE',  
  110.             'attach'        => $order['order_sn']  
  111.         );  
  112.         ksort($parameter);//参数排序  
  113.           
  114.         $xml='<xml>';  
  115.         $sign  = '';          
  116.         foreach ($parameter AS $key => $val)  
  117.         {  
  118.             //$param ."$key=" .urlencode($val). "&";  
  119.             $sign."$key=$val&";  
  120.             $xml.'<'.$key.'>'.$val.'</'.$key.'>';  
  121.         }  
  122.         //$param = substr($param, 0, -1);  
  123.         $stringSignTemp = substr($sign, 0, -1)."&key=".$payment['wxpay_key'];  
  124.         $sign = strtoupper(md5($stringSignTemp));//生成签名  
  125.         $parameter['sign']=$sign;  
  126.         $xml.='<sign>'.$sign.'</sign>';  
  127.         $xml.='</xml>';  
  128.                   
  129.         $resp=$this->ihttps_request($site_url,$xml);//发送http请求          
  130.           
  131.         //if ($resp['code'] == 200 && $resp['content']) {  
  132.         $packet = array();  
  133.         $obj = simplexml_load_string($resp, 'SimpleXMLElement', LIBXML_NOCDATA);//解格XML  
  134.         if($obj instanceof SimpleXMLElement) {  
  135.             $packet['return_code']=strval($obj->return_code);  
  136.             $packet['return_msg']=strval($obj->return_msg);  
  137.             $packet['result_code']=strval($obj->result_code);  
  138.             $packet['code_url']=strval($obj->code_url);  
  139.  
  140.             if($packet['return_code']=='SUCCESS')  
  141.             {  
  142.                 $pay_url = $packet['code_url'];  
  143.             }else{  
  144.                 $pay_url = 'error';  
  145.                 echo $packet['return_msg'];  
  146.             }  
  147.         }  
  148.         //}  
  149.           
  150.         /*  
  151.          * includes/phpqrcode/phpqrcode.php  
  152.          * 生成二维码  
  153.          */  
  154.         include_once('/includes/phpqrcode/phpqrcode.php');  
  155.         // 生成的文件名   
  156.         $filename = 'images/Image/wxpay_'.$order['order_sn'].'.png'; //'/images/Image/'.$order['order_sn'].'.png';   
  157.         // 纠错级别:L、M、Q、H   
  158.         $errorCorrectionLevel = 'L';   
  159.         // 点的大小:1到10   
  160.         $matrixPointSize = 4;   
  161.           
  162.         QRcode::png($pay_url, $filename, $errorCorrectionLevel, $matrixPointSize, 2);//生成二维码  
  163.           
  164.         $button = '<div style="text-align:center"><img src="'.$filename.'"/></div>';  
  165.         //$button = '<div style="text-align:center">'.$pay_url.'<br/><img src="'.$filename.'"/></div>';  
  166.         //$button = '<div style="text-align:center"><input type="button" onclick="window.open(\'https://www.alipay.com/cooperate/gateway.do?'.$param. '&sign='.md5  
  167.  
  168. ($sign).'&sign_type=MD5\')" value="' .$GLOBALS['_LANG']['pay_button']. '" /></div>';  
  169.  
  170.         return $button;  
  171.     }     
  172.       
  173.  
  174.     /**  
  175.      * 响应操作  
  176.      */  
  177.     function respond()  
  178.     {  
  179.         ecs_logging('HTTP_RAW_POST_DATA',$GLOBALS['HTTP_RAW_POST_DATA']);  
  180.         $resp = $GLOBALS['HTTP_RAW_POST_DATA'];  
  181.         $packet = array();  
  182.         $obj = simplexml_load_string($resp, 'SimpleXMLElement', LIBXML_NOCDATA);  
  183.         if($obj instanceof SimpleXMLElement) {  
  184.             $packet['return_code']=strval($obj->return_code);  
  185.             $packet['openid']=strval($obj->openid);  
  186.             $packet['result_code']=strval($obj->result_code);  
  187.             $packet['attach']=strval($obj->attach);  
  188.             $packet['out_trade_no']=strval($obj->out_trade_no);  
  189.             $packet['total_fee']=strval($obj->total_fee);  
  190.               
  191.             $xml='<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>';  
  192.               
  193.         }else{  
  194.  
  195.             $xml='<xml><return_code>FAIL</return_code><return_msg>is error</return_msg></xml>';  
  196.         }  
  197.  
  198.         echo $xml;  
  199.           
  200.         if($packet['return_code']=='SUCCESS' && $packet['result_code']=='SUCCESS')  
  201.         {  
  202.             $order_sn = str_replace($packet['attach'], '', $packet['out_trade_no']);  
  203.             $order_sn = trim($order_sn);//此$order_sn有可能为log_id或pay_pici_no,合并付款时,order_sn=$pay_pici_no  
  204.  
  205.             /* 检查支付的金额是否相符 */  
  206.             //if (!check_money($order_sn, $packet['total_fee']))  
  207.             //{  
  208.             //    return false;  
  209.             //}  
  210.  
  211.             /* 改变订单状态 */  
  212.             order_paid($order_sn, 2);  
  213.  
  214.             return true;  
  215.               
  216.         }else{  
  217.               
  218.             return false;  
  219.         }  
  220.  
  221.     }  
  222.     //生成随机字符串  
  223.     function set_random($length, $numeric = 0) {  
  224.         $seed = base_convert(md5(microtime().$_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);  
  225.         $seed = $numeric ? (str_replace('0', '', $seed).'012340567890') : ($seed.'zZ'.strtoupper($seed));  
  226.         if($numeric) {  
  227.             $hash = '';  
  228.         } else {  
  229.             $hash = chr(rand(1, 26) + rand(0, 1) * 32 + 64);  
  230.             $length--;  
  231.         }  
  232.         $max = strlen($seed) - 1;  
  233.         for($i = 0; $i < $length; $i++) {  
  234.             $hash .= $seed{mt_rand(0, $max)};  
  235.         }  
  236.         return $hash;  
  237.     }  
  238.     //http请求  
  239.     function ihttps_request($url, $data = null)  
  240.     {  
  241.         $curl = curl_init();  
  242.         curl_setopt($curl, CURLOPT_URL, $url);  
  243.         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);  
  244.         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);  
  245.         if (!empty($data)){  
  246.             curl_setopt($curl, CURLOPT_POST, 1);  
  247.             curl_setopt($curl, CURLOPT_POSTFIELDS, $data);  
  248.         }  
  249.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
  250.         $output = curl_exec($curl);  
  251.         curl_close($curl);  
  252.         return $output;  
  253.     }  
  254.           
  255. }  
  256.  
  257. ?> 

转载请写明出处。

(责任编辑:6g下载网)

分享到:

------分隔线----------------------------