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 相关文章推荐
Thinkphp中的volist标签用法简介
Jun 18 PHP
ThinkPHP页面跳转success与error方法概述
Jun 25 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
php准确计算复活节日期的方法
Apr 18 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
smarty简单应用实例
Nov 03 PHP
php实现的操作excel类详解
Jan 15 PHP
php源码 fsockopen获取网页内容实例详解
Sep 24 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
php5对象复制、clone、浅复制与深复制实例详解
Aug 14 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 PHP
PHP实现简单的协程任务调度demo示例
Feb 01 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
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
Python自动连接ssh的方法
2015/03/07 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
pandas分区间,算频率的实例
2019/07/04 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
python 模块导入问题汇总
2021/02/01 Python
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
大学自我评价
2014/02/12 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
Redis 哨兵集群的实现
2021/06/18 Redis