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

本文实例为大家分享了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);

}

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

(0)

相关推荐

  • 分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件

    最近比较工作比较轻松,帮一个朋友的基于ecshop开发的商城加入微信扫描支付功能,本以为是很简单的事儿--下载官方sdk或开发帮助文档,按着里面的做就ok了,谁知折腾了两三天的时间才算搞定,中间也带着疑问在网上找了不少技术文章,却发现都只是比较粗略的写他们是怎么开发接入的,并没有解决我遇到的问题...,唉,有时候真心的感觉'只能靠自己'. 本文就是想把自己遇到的问题及解决办法写出来,让做这方面开发的朋友有所帮助! 开发之前,先查看官方[扫码支付]开发文档,扫码支付分为以下两种模式: △模式一:

  • PHP 微信扫码支付源代码(推荐)

    代码中包含四个文件createUrl.php.ArrayToXML.php.returnGoodsUrl.php.notifyUrl.php . 具体详细代码大家可以参考下: createUrl.php:创建微信二维码支付链接 ``` /** * @author chantrans * 本页面的作用是生成商品二维码链接 */ echo createUrl("12314124"); /** * 产生随机字符串 */ function getNonceStr() $chars = 'ABC

  • PHP 接入微信扫码支付总结(总结篇)

    微信扫码支付分为两种模式, 模式一比较复杂,需要公众号配置回调地址. 模式二比较简单,只需要在代码中配置回调地址就可以了. 我这次使用的是模式二. 需要配置参数, const APPID = 'xxx'; const MCHID = 'xxx'; const KEY = 'xxx'; const APPSECRET = 'xxx'; 配置公众号的appid,appsecret.以及微信支付的mchid与key. 生成二维码,这个页面需要自己去美化,不像支付宝那样自带效果. require_onc

  • php实现微信扫码支付

    代码中包含四个文件createUrl.php.ArrayToXML.php.returnGoodsUrl.php.notifyUrl.php . createUrl.php:创建微信二维码支付链接 <?php /** * @author chantrans * 本页面的作用是生成商品二维码链接 */ //测试 echo createUrl("12314124"); /** * 产生随机字符串 */ function getNonceStr() { $chars = 'ABCDEF

  • php实现微信原生支付(扫码支付)功能

    网上的很多PHP微信扫码支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,只有200行代码,希望可以给各位想接入微信扫码支付的带来些许帮助和借鉴意义. 直接运行该文件即可得到一个支付二维码的图片. 需要注意的事项: 1.该文件需放到支付授权目录下,可以在微信支付商户平台->产品中心->开发配置中设置. 2.如提示签名错误可以通过微信支付签名验证工具进行验证:微信公众平台支付接口调试工具 代码如下: <?php header('Content-type:

  • 微信公众平台开发教程⑤ 微信扫码支付模式介绍

    本文实例讲述了微信扫码支付模式.分享给大家供大家参考,具体如下: 背景:因为微信占据众多的用户群,作为程序开发,自然而然也成了研究的重点.毕竟个人能力有限,很难想象设计的复杂性,多数时间接触起来,各种蒙圈,在此笔记自己的操作流程,仅做参考,欢迎指正. 一.微信扫码支付模式 1.附带微信公众号"微信开发"中,对微信扫码支付的两种模式流程图以作"膜拜". 2.具体的操作,可详细参考官方开发文档 文档有强调: 模式一开发前,商户必须在公众平台后台设置支付回调URL.URL

  • ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解

    本文实例讲述了ThinkPHP框架整合微信支付之Native 扫码支付模式一.分享给大家供大家参考,具体如下: 大家好,这篇文章是继微信支付jsapi篇之后的微信支付系列教程第二篇:扫码支付之模式一介绍下扫码支付目前有两种模式,模式一比模式二稍微复杂点,至于模式一与模式二的具体内容,流程,微信开发文档都有详细介绍,这里就不多说废话,接下来赶紧上教程! 首先我们还是一样,导入微信支付的类库: 接下来是Public下的文件: 这里的配置跟JSAPI支付一样,不需要改动 具体关于文件介绍请参考JSAP

  • ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解

    本文实例讲述了ThinkPHP框架整合微信支付之Native 扫码支付模式二.分享给大家供大家参考,具体如下: 大家好,这篇文章是继微信支付之Native 扫码支付 模式一之后的微信支付系列教程第三篇:扫码支付之模式二 介绍下扫码支付目前有两种模式,模式一比模式二稍微复杂点,至于模式一与模式二的具体内容,流程,微信开发文档都有详细介绍,这里就不多说废话,接下来赶紧上教程! 首先我们还是一样,导入微信支付的类库: 接下来是Public下的文件: 以上跟Native扫码模式一一样,不明白请看 //w

  • PC端微信扫码支付成功之后自动跳转php版代码

    本文实例为大家分享了php微信扫码支付成功之后自动跳转的具体代码,供大家参考,具体内容如下 场景: PC端   微信扫码支付 结果: 支付成功 自动跳转 实现思路: 支付二维码页面,写ajax请求支付状态,请求到结果,无论成功还是失败,都跳转到相应的结果页面 具体实现方法: html部分: 支付结果状态设定: 0 未支付  1 支付成功 2 支付失败 <input type="hidden" id="order_id" value="<?php

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

    本文实例为大家分享了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', 'det

  • Java微信支付之公众号支付、扫码支付实例

    微信支付现在已经变得越来越流行了,随之也出现了很多以可以快速接入微信支付为噱头的产品,不过方便之余也使得我们做东西慢慢依赖第三方,丧失了独立思考的能力,这次打算分享下我之前开发过的微信支付. 一 .H5公众号支付 要点:正确获取openId以及统一下单接口,正确处理支付结果通知,正确配置支付授权目录 H5的支付方式是使用较为广泛的方式,这种支付方式主要用于微信内自定义菜单的网页,依赖手机上安装的微信客户端,高版本的微信才支持微信支付,下面按我的流程注意说明 1  编写用于支付的页面,由于是测试用

  • 微信支付之公众号支付(java实现)

    最近两周实现了调用微信接口使用微信进行支付的需求,包含公众号支付及扫码支付两种方式,由于微信文档写的较为简略,现将调用微信接口进行支付流程进行记录及分享. 本文旨在对公众号支付的实现流程进行介绍,即微信用户从公众号中点击链接进入商品h5页面,选择商品后点击支付按钮后弹出微信支付页面.输入支付密码.支付成功后跳转到全部商品页面的整个过程.微信扫码支付请参看后续文章. 1.首先,商户需申请微信公众号.微信商户号及微信支付权限.开发过程中需参照公众号及商户平台提供如下参数: ① appid:公众号id

  • php微信支付之公众号支付功能

    网上的很多PHP微信扫码支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入微信扫码支付的带来些许帮助和借鉴意义. 将该文件放到你的授权目录下,并在微信里访问这个文件,即可看到演示效果.效果如下:   需要注意的事项: 1.该文件需放到支付授权目录下,可以在微信支付商户平台->产品中心->开发配置中设置. 2.如提示签名错误可以通过微信支付签名验证工具进行验证:微信公众平台支付接口调试工具 代码如下: <?php header('Co

  • C# MVC 微信支付教程系列之公众号支付代码

    今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通过公众号里面的菜单链接,进入公众号的商城,然后在里面完成购买和支付功能,我们可以看看官方对这个公众号支付的场景的解释,链接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1,通过这个官方的解释,那我们大概清楚这个公众号的用途了,下面,我就说说,做这个公众号支付的准备工作有哪

  • Java微信支付之服务号支付代码示例

    Java微信支付之服务号支付实现,网上的java微信支付sdk和Demo基本上是水的,看着头疼所以我决心自己开始写Java微信支付之公众号支付,多的不说见下面源码,为了方便使用我分别用了两个Servlet,一个是统一下单UnifiedorderServlet,一个是支付回调PayCallBackServlet,你们可以自己封装. 一是统一下单UnifiedorderServlet: import java.io.BufferedReader; import java.io.IOException

  • .NET微信扫码支付接入(模式二-NATIVE)

    一.前言 经过两三天的琢磨总算完成了微信扫码支付功能,不得不感叹几句: 微信提供的DEMO不错,直接复制粘贴就可以跑起来了: 微信的配置平台我真是服了.公众平台.商户平台.开放平台,一个平台一套账户密码,大写的恶心        DEMO地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1 .NET版DEMO中的Lib文件夹是关键,直接复制到自己的代码里,或者打成dll随个人意愿. 二.正文 Step1:肯定是产生商户

随机推荐