php实现微信和支付宝支付的示例代码


Posted in PHP onAugust 11, 2020

php实现微信支付

微信支付文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html

在php下实现微信支付,这里我使用了EasyWeChat

这里我是在Yii框架实现的,安装EasyWeChat插件

composer require jianyan74/yii2-easy-wechat

一:配置EasyWeChat

1:在config/main.php 的 component中添加EasyWeChat的SDK

'components' => [ 
  // ... 
  'wechat' => [ 
    'class' => 'jianyan\easywechat\Wechat', 
    'userOptions' => [], // 用户身份类参数 
    'sessionParam' => 'wechatUser', // 微信用户信息将存储在会话在这个密钥 
    'returnUrlParam' => '_wechatReturnUrl', // returnUrl 存储在会话中 
    'rebinds' => [ // 自定义服务模块  
      // 'cache' => 'common\components\Cache', 
    ] 
  ], 
  // ... 
]

2:在config/params.php中设置基础配置信息和微信支付信息

// 微信配置 具体可参考EasyWechat  
'wechatConfig' => [], 
// 微信支付配置 具体可参考EasyWechat 
'wechatPaymentConfig' => [], 
// 微信小程序配置 具体可参考EasyWechat 
'wechatMiniProgramConfig' => [], 
// 微信开放平台第三方平台配置 具体可参考EasyWechat 
'wechatOpenPlatformConfig' => [], 
// 微信企业微信配置 具体可参考EasyWechat 
'wechatWorkConfig' => [], 
// 微信企业微信开放平台 具体可参考EasyWechat 
'wechatOpenWorkConfig' => [], 
// 微信小微商户 具体可参考EasyWechat 
'wechatMicroMerchantConfig' => [],

具体配置方法可以参考GitHub的说明:https://github.com/jianyan74/yii2-easy-wechat

二:实现微信支付

1:微信支付api

$data = [ 
  'body' => '',//支付描述 
  'out_trade_no' => '',//订单号 
  'total_fee' => '',//支付金额 
  'notify_url' => '', // 支付结果通知网址,如果不设置则会使用配置里的默认地址 
  'trade_type' => 'JSAPI',//支付方式 
  'openid' => '',//用户openid 
]; 
// 生成支付配置 
$payment = Yii::$app->wechat->payment; 
$result = $payment->order->unify($data); 
if ($result['return_code'] == 'SUCCESS') { 
  $prepayId = $result['prepay_id']; 
  $config = $payment->jssdk->sdkConfig($prepayId); 
} else { 
  throw new yii\base\ErrorException('微信支付异常, 请稍后再试'); 
}  
return $this->render('wxpay', [ 
  'jssdk' => $payment->jssdk, // $app通过上面的获取实例来获取 
  'config' => $config 
]);

2:在wxpay.php文件中发起支付

<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js" type="text/javascript" charset="utf-8"></script> 
<script type="text/javascript" charset="utf-8"> 
  //数组内为jssdk授权可用的方法,按需添加,详细查看微信jssdk的方法 
  wx.config(<?php echo $jssdk->buildConfig(array('chooseWXPay'), true) ?>); 
  function onBridgeReady(){ 
    // 发起支付 
    wx.chooseWXPay({ 
      timestamp: <?= $config['timestamp'] ?>, 
      nonceStr: '<?= $config['nonceStr'] ?>', 
      package: '<?= $config['package'] ?>', 
      signType: '<?= $config['signType'] ?>', 
      paySign: '<?= $config['paySign'] ?>', // 支付签名 
      success: function (res) { 
        // 支付成功后的回调函数 
      }, 
      cancel: function(r) { 
        //支付取消后的回调函数 
      }, 
    }); 
  } 
  if (typeof WeixinJSBridge == "undefined"){ 
    if( document.addEventListener ){ 
      document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); 
    }else if (document.attachEvent){ 
      document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
      document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); 
    } 
  }else{ 
    onBridgeReady(); 
  } 
</script>

在异步回调地址中获取微信支付回调只需要使用如下方法即可:

$payment = Yii::$app->wechat->payment; 
$response = $payment->handlePaidNotify(function($message, $fail) { 
  //支付结果逻辑,只有在函数里 return true; 才代表处理完成 
}); 
$response->send();

根据如上步骤就可以实现微信支付

php实现支付宝支付

支付宝支付文档地址:https://opendocs.alipay.com/open/00y8k9

一:在php中安装支付宝插件

composer require alipaysdk/easysdk

alipaysdk/easysdk的GitHub地址:https://github.com/alipay/alipay-easysdk/tree/master/php

二:php实现支付宝支付

1:配置支付宝

/** 
 * 支付宝配置 
 */ 
public static function getOptions() 
{ 
  $options = new Config(); 
  $options->protocol = 'https'; 
  $options->gatewayHost = 'openapi.alipay.com'; 
  $options->signType = 'RSA2'; 
  $options->appId = '<-- 请填写您的AppId,例如:2019022663440152 -->'; 
  // 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中 
  $options->merchantPrivateKey = '<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->'; 
  $options->alipayCertPath = '<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey\_RSA2.crt -->'; 
  $options->alipayRootCertPath = '<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt" -->'; 
  $options->merchantCertPath = '<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey\_2019051064521003.crt -->'; 
  //注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可 
  // $options->alipayPublicKey = '<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->'; 
  //可设置异步通知接收服务地址(可选) 
  $options->notifyUrl = "<-- 请填写您的支付类接口异步通知接收服务地址,例如:https://www.test.com/callback -->"; 
  //可设置AES密钥,调用AES加解密相关接口时需要(可选) 
  //$options->encryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->"; 
  return $options; 
}

2:实现支付宝支付

//加载支付宝配置 
Factory::setOptions(self::getOptions()); 
try { 
  //发起API调用 
  $result = Factory::payment()->wap()->pay('订单标题', '商户订单号', '订单总金额', '用户付款中途退出返回商户网站的地址', '支付回调地址'); 
  $responseChecker = new ResponseChecker(); 
  //处理响应或异常 
  if ($responseChecker->success($result)) { 
    //调用成功 
    return $result->body; 
  } else { 
    //调用失败 
    $errorMsg = $result->msg . $result->subMsg; 
    throw new yii\\base\\ErrorException($errorMsg); 
  } 
} catch (\\Exception $e) { 
  throw new yii\\base\\ErrorException($e->getMessage()); 
}

根据如上就可以实现支付宝支付

到此这篇关于php实现微信和支付宝支付的示例代码的文章就介绍到这了,更多相关php实现微信和支付宝支付内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
基于curl数据采集之正则处理函数get_matches的使用
Apr 28 PHP
深入Memcache的Session数据的多服务器共享详解
Jun 13 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
PHP概率计算函数汇总
Sep 13 PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 PHP
PHP session 会话处理函数
Jun 06 PHP
PHP简单遍历对象示例
Sep 28 PHP
如何打开php的gd2库
Feb 09 PHP
php读取和保存base64编码的图片内容
Apr 22 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 PHP
php封装实现钉钉机器人报警接口的示例代码
Aug 08 #PHP
基于PHP的微信公众号的开发流程详解
Aug 07 #PHP
php+js实现点赞功能的示例详解
Aug 07 #PHP
PHP基于phpqrcode类生成二维码的方法示例详解
Aug 07 #PHP
php模拟post提交请求调用接口示例解析
Aug 07 #PHP
基于PHP+mysql实现新闻发布系统的开发
Aug 06 #PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
Aug 06 #PHP
You might like
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
PHP 面向对象详解
2012/09/13 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
Eclipse + Python 的安装与配置流程
2013/03/05 Python
Python中字符串的处理技巧分享
2016/09/17 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
Python聊天室程序(基础版)
2018/04/01 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
python 如何引入协程和原理分析
2020/11/30 Python
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
函授自我鉴定
2013/11/06 职场文书
校园网站的创业计划书范文
2013/12/30 职场文书
诚实守信演讲稿
2014/09/01 职场文书
博士生专家推荐信
2014/09/26 职场文书
服务行业标语口号
2015/12/26 职场文书