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基础学习之变量的使用
Jun 09 PHP
php引用地址改变变量值的问题
Mar 23 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
codeigniter教程之多文件上传使用示例
Feb 11 PHP
php截取中文字符串函数实例
Feb 23 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
Nov 04 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
Jul 03 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 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中strtotime函数使用方法详解
2011/11/27 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
python WindowsError的错误代码详解
2017/07/23 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
如何在Django中使用聚合的实现示例
2020/03/23 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
贺卡寄语大全
2014/04/11 职场文书
小学五年级学生评语
2014/04/22 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js