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 相关文章推荐
整合了前面的PHP数据库连接类~~做成一个分页类!
Nov 25 PHP
php下MYSQL limit的优化
Jan 10 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
php数组分页实现方法
Apr 30 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
PHP 文件上传限制问题
Sep 01 PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 21 PHP
tp5使用layui实现多个图片上传(带附件选择)的方法实例
Nov 17 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读MYSQL中文乱码的解决方法
2006/12/17 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
Python中的with...as用法介绍
2015/05/28 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
解决python 自动安装缺少模块的问题
2018/10/22 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
HTML5本地存储之Database Storage应用介绍
2013/01/06 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
放飞梦想演讲稿200字
2014/08/26 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
草房子读书笔记
2015/06/29 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
Python 制作自动化翻译工具
2021/04/25 Python
Python数据类型最全知识总结
2021/05/31 Python
MySQL批量更新不同表中的数据
2022/05/11 MySQL