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 相关文章推荐
建立文件交换功能的脚本(一)
Oct 09 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
Jul 15 PHP
简单的php中文转拼音的实现代码
Feb 11 PHP
PHP获取数组最后一个值的2种方法
Jan 21 PHP
php数组使用规则分析
Feb 27 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 PHP
php实现随机生成易于记忆的密码
Jun 19 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 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实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
PHP 错误处理机制
2015/07/06 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
python八大排序算法速度实例对比
2017/12/06 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
医科大学生毕业的自我评价分享
2013/11/12 职场文书
设备管理实施方案
2014/05/31 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
驾驶员安全责任书
2014/07/22 职场文书
2015年小学语文工作总结
2015/05/25 职场文书
字节飞书面试promise.all实现示例
2022/06/16 Javascript