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 相关文章推荐
如何隐藏你的.php文件
Jan 04 PHP
用PHP 快速生成 Flash 动画的方法
Mar 06 PHP
php Ubb代码编辑器函数代码
Jul 05 PHP
php操作mysqli(示例代码)
Oct 28 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
Linux下PHP连接Oracle数据库
Aug 20 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
PHP中list方法用法示例
Dec 01 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
Laravel 读取 config 下的数据方法
Oct 13 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 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
python自定义类并使用的方法
2015/05/07 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
python定时关机小脚本
2018/06/20 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
如何用PHP实现邮件发送
2012/12/26 面试题
红领巾心向党广播稿
2014/01/19 职场文书
2013年军训通讯稿
2014/02/05 职场文书
小学敬老月活动方案
2014/02/11 职场文书
金融事务专业求职信
2014/04/25 职场文书
基层党员对照检查材料
2014/09/24 职场文书
师范生免费教育协议书范本
2014/10/09 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
志愿者工作心得体会
2016/01/15 职场文书
高中数学教学反思范文
2016/02/18 职场文书
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python