php微信扫码支付 php公众号支付


Posted in PHP onMarch 24, 2019

本文实例为大家分享了php微信扫码支付,公众号支付的具体代码,供大家参考,具体内容如下

<?php
 
# 微信统一下单接口
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
 
 
$param = [
 'appid' => '公众号id',
 'mch_id' => '商户id',
 'nonce_str' =>uniqid(),
 'sign_type' => 'MD5',
 'body' => 'test',
 'detail' => 'test detail',
 'out_trade_no' => date('Ymd').rand(10000,99999),
 'total_fee' => 1,
 'notify_url' => 'http://www.test.top/testpay/pay.php',
 'trade_type' =>'JSAPI',
];
 
 
ksort( $param );
 
$sign_str = urldecode(http_build_query( $param ));
 
 
$sign_str .= '&key=商户密钥';
 
 
//echo $sign_str;exit;
 
$sign_str = md5( $sign_str );
 
 
$param['sign'] = strtoupper( $sign_str );
 
function CurlPost($url, $param = [], $is_post = 1, $timeout = 5 )
{
 
 //初始化curl
 $curl = curl_init();
 
 // 设置请求的路径
 curl_setopt($curl, CURLOPT_URL, $url);
 
 if ($is_post == 1) {
  //设置POST提交
  curl_setopt($curl, CURLOPT_POST, 0);
 }
 
 //显示输出结果 1代表 把接口返回的结果当作一个字符串处理
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 
 // 设置请求超时时间
 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
 
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
 
 
 if ($is_post == 1) {
  //提交数据 -- 设置post提交的数据
  if (is_array($param)) {
 
   //http_build_query
   curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($param));
  } else {
   curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
  }
 }
 
 //执行请求
 $data = $data_str = curl_exec($curl);
 //处理错误
 if ($error = curl_error($curl)) {
  $log_data = array(
   'url' => $url,
   'param' => $param,
   'error' => '<span style="color:red;font-weight: bold">' . $error . '</span>',
  );
 
  var_dump($log_data);
  exit;
 }
 
 # 关闭CURL
 curl_close($curl);
 
 
 //json数据转换为数组
 $data = json_decode($data, true);
 
 if (!is_array($data)) {
  $data = $data_str;
 }
 
 #调用玩接口之后写一个日志
 $log = [
  'url' => $url,
  'param' => $param,
  'response' => $data_str
 ];
 file_put_contents(__DIR__ . '/wechat.log', print_r($log, true), 8);
 
 return $data;
 
}
function arr2Xml( $arr ){
 
 $xml = '<xml version="1.0" encoding="UTF-8"> ';
 foreach( $arr as $key => $value ){
  if (is_numeric($value)){
   $xml.="<".$key.">".$value."</".$key.">";
  }else{
   $xml.="<".$key."><![CDATA[".$value."]]></".$key.">";
  }
 
 }
 $xml .= '</xml>';
 return $xml;
}
 
$xml = arr2Xml( $param );
 
$result = CurlPost( $url , arr2Xml($param) );
 
 
$api_arr = json_decode( json_encode(simplexml_load_string( $result , 'SimpleXMLElement', LIBXML_NOCDATA) ), true );
 
if( $api_arr['return_code'] == 'SUCCESS' ){
 
 include __DIR__ . '/phpqrcode.php';
 header('content-type:image/png');
 echo Qrcode::png( $api_arr['code_url'] , false , 'H' , 6 ,2 );
}
<?php
 
#微信统一下单接口
$url='https://api.mch.weixin.qq.com/pay/unifiedorder';
 
$param=[
 #公众账号ID
 'appid'=>'****',
 'mch_id'=>'***',
 'nonce_str'=>uniqid(),
 'sign_type'=>'MD5',
 'body'=>'test',
 'detail'=>'detail',
 'out_trade_no'=>date('Ymd').rand(10000,99999),
 'total_fee'=>1,
 'spbill_create_ip'=>$_SERVER['SERVER_ADDR'],
 'notify_url'=>'http://****/test.php',
 'trade_type'=>'NATIVE',
];
ksort($param);
 
$sign_str=urldecode(http_build_query($param));
 
$sign_str.='&key=8934e7d15453e97507ef794cf7b0519d';
 
$sign_str=md5($sign_str);
 
$param['sign']=strtoupper($sign_str);
 
//print_r($param);exit;
function CurlPost($url, $param = [], $is_post = 1, $timeout = 5 )
{
 //初始化curl
 $curl = curl_init();
 
 // 设置请求的路径
 curl_setopt($curl, CURLOPT_URL, $url);
 
 if ($is_post == 1) {
  //设置POST提交
  curl_setopt($curl, CURLOPT_POST, 0);
 }
 
 //显示输出结果 1代表 把接口返回的结果当作一个字符串处理
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 
 // 设置请求超时时间
 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
 
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
 
 
 if ($is_post == 1) {
  //提交数据 -- 设置post提交的数据
  if (is_array($param)) {
 
   //http_build_query
   curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($param));
  } else {
   curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
  }
 }
 
 //执行请求
 $data = $data_str = curl_exec($curl);
 //处理错误
 if ($error = curl_error($curl)) {
  $log_data = array(
   'url' => $url,
   'param' => $param,
   'error' => '<span style="color:red;font-weight: bold">' . $error . '</span>',
  );
 
  var_dump($log_data);
  exit;
 }
 
 # 关闭CURL
 curl_close($curl);
 
 
 //json数据转换为数组
 $data = json_decode($data, true);
 
 if (!is_array($data)) {
  $data = $data_str;
 }
 
 #调用玩接口之后写一个日志
 $log = [
  'url' => $url,
  'param' => $param,
  'response' => $data_str
 ];
 file_put_contents(__DIR__ . '/wechat.log', print_r($log, true), 8);
 
 return $data;
 
}
 
function arrzxml($arr){
 $xml='<xml version="1.0" encoding="UTF-8">';
 foreach($arr as $key=>$value){
  if(is_numeric($value)){
   $xml.="<".$key.">".$value."</".$key.">";
  }else{
   $xml.="<".$key."><![CDATA[".$value."]]></".$key.">";
  }
 
 }
 $xml.='</xml>';
// var_dump($xml);exit;
 return $xml;
 
}
 
$xml=arrzxml($param);
$result=CurlPost($url,arrzxml($param));
//echo '<pre/>';
var_dump($result);
exit;
$api_arr=json_decode(simplexml_load_string($result,'SimpleXMLElement',LIBXML_NOCDATA),true);
if($result['return_code']=='SUCCESS'){
 include __DIR__.'/phpqrcode.php';
 header('content-type:image/png');
 echo Qrcode::png($api_arr['code_url'],false,'H',6,2);
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
Feb 14 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
php 判断服务器操作系统的类型
Feb 17 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
yii2控制器Controller Ajax操作示例
Jul 23 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 #PHP
详解PHP变量传值赋值和引用赋值变量销毁
Mar 23 #PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 #PHP
PHP使用OB缓存实现静态化功能示例
Mar 23 #PHP
Laravel如何自定义command命令浅析
Mar 23 #PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 #PHP
PHP中命名空间的使用例子
Mar 22 #PHP
You might like
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
javascript ie6兼容position:fixed实现思路
2013/04/01 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
基于Python的身份证号码自动生成程序
2014/08/15 Python
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
python读取ini配置文件过程示范
2019/12/23 Python
python标识符命名规范原理解析
2020/01/10 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
简单html5代码获取地理位置
2014/03/31 HTML / CSS
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
同学聚会欢迎辞
2014/01/14 职场文书
运动会解说词50字
2014/01/18 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
素质拓展训练感想
2015/08/07 职场文书
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL