一个PHP文件搞定支付宝系列之手机网站支付(兼容微信浏览器)

news/2024/4/29 20:44:00/文章来源:https://blog.csdn.net/weixin_34126215/article/details/88953528

网上的很多PHP支付宝支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入支付宝支付的带来些许帮助和借鉴意义。

一个PHP文件搞定支付宝系列:https://github.com/dedemao/al...

一个PHP文件搞定微信支付系列:https://github.com/dedemao/we...

在手机浏览器下打开实现效果

图片描述
图片描述

在微信中打开实现效果

图片描述

注:兼容微信浏览器需依赖支付宝官方提供的demo(alipay_in_weixin_demo)中的两个文件,即:ap.js及pay.htm

环境依赖

PHP5.0以上,且需要开启CURL服务、SSL服务。

如需兼容微信浏览器,还需依赖ap.js及pay.htm。

注意事项

1.文件开头的配置信息必须完善
2.商户私钥需填写对应签名算法类型的私钥,如何生成密钥参考:
2.1 https://docs.open.alipay.com/...
2.2 https://docs.open.alipay.com/...

代码

<?php
header('Content-type:text/html; Charset=utf-8');
$appid = 'xxxxx';  //https://open.alipay.com 账户中心->密钥管理->开放平台密钥,填写添加了电脑网站支付的应用的APPID
$returnUrl = 'http://www.xxx.com/alipay/return.php';     //付款成功后的同步回调地址
$notifyUrl = 'http://www.xxx.com/alipay/notify.php';     //付款成功后的异步回调地址
$outTradeNo = uniqid();     //你自己的商品订单号
$payAmount = 0.01;          //付款金额,单位:元
$orderName = '支付测试';    //订单标题
$signType = 'RSA2';       //签名算法类型,支持RSA2和RSA,推荐使用RSA2
//商户私钥,填写对应签名算法类型的私钥,如何生成密钥参考:https://docs.open.alipay.com/291/105971和https://docs.open.alipay.com/200/105310
$saPrivateKey='MIIEpAIBAAKCAQEA1MV+OY6MvGfXPM0MkpjT+FdzGmPOvVmX2wF3gjwQpeHBEUP9jLXhVS32fZ1iXI1e7WUGQ5tvXn28P8190kpOn/c/G5t2CAksUvemvF7uJN/N3Z1HFMdt3omvCd14K05lgcFYz7Z4c+A7ZJF5bPCB6oshjjUmbCY3hibuWzX/1j8AgsoD9lLyxoFqxLj98k5ZrYIhk900gMQs/WJ3A1FC09Dln9fuhBUyjtPHaml+4w+sdkdzxPktxdFrMcI7M7rNEwg25XtST5Z49oFpE84AlXM7+oC9jYvIpTGE00WomsgtakN039ucT/59Bup6pLkO08Rv85UXbqzGTcYAhNHLfQIDAQABAoIBAQCbuPM58s+j8KgB8ty5yiqRPoeaj+O2h4Txn7A02/sfPQvNtCI0wsTpT5twsihULo+EVYTxJCitUn7df2sP5pyGzTEd5njLRtNu4Zvhj+Thjf1grERiu9b4oXI/WRzjLRxzi+uREi40OK+fWi0xgxDCdROY/eNiEdJfV8zpaqsUxG7VdwZIJQ/8d3Mi31OWv30kr9jfEd15DBInGJgSqR+qwrAB4pBSMcW8hL6PYlzoPi1ygceFjRrnbeMG40zt0OUPSexQIgAmFvGqxTl5xo3dFEziGHdfWYsBKZ2M8ubAe+R6LcndxI+o2Hw4TNcC1tDeNMtjw7+h9S5aef5A8uWBAoGBAPxCLWPhUHCYlIXUz0D1SoolZs9WK7Kz1YSWnzqrpegN+foS5/ji93YylGE+KL31TwbnGQLAwknwMX3qTzmkvTovmy8jevXBsCSEFm81q0wG/35e1SKkTXL66RqB2y0xFLdcF3f9s8ZiEclqkYwNSHh0nqzREfIxMMAsj+3n2vHdAoGBANftYkZYrbs4iI/ZcjmBYguYikNfNmrD+Ta6ckOGZqsHfwXJCAz1rF4/XCqVAc9nxuzJR/72qkn9z07uH6qSZCqlZDRki2KaK2UVqFDB+0abMk/TGHXuMmdvMkyj2jEZxG2rkg0kmg4qYkkg/5tGG1On/0GeZNVPu8JpsFr1pDYhAoGBANr8pCTKC6fDfWP1C3qrtmrY7zhc6RB4d4pjq5UmP5+EypaiZQi2F/dfD1qfuIS3eURXyGmQZtoDDyPtDZvP/ImPnFs+pNbFryD0HfmrEKquhIvyzXoGQknnsgbV5iyEKCTJaII9FxzINAKzZei7+0a+jqUd1kN3Gogp50Sze2ltAoGARaM5Xpaa8RZ6dGocfI9Nn4/Ch5fdZPFvHkdjMoPV+LKiNKtw/Tz+KiclAlasDsfZT+RaY9AJe3NvuHTzoX807swIVR1Xr3EpLaCed+0XrN3AjB34dZAskU87WZw+cjdtMjFzGOoFBSyGJi+OP/WMOp6jo/YBbwoX88tCJROzsgECgYAT8pHHIyPt5Y/5pDb8EDvD3XNES1fBkfZffSoAodsrkeoKgrsKl+9M3rcGX+S9dscyoH0ur3BFTMHtIOOhC5qytt+BhMHIP5mAs4di4u/joQCWQbUyrUggVK5it+6BFgAT+jeB7zTAUtgGpTVFq3kLbV0NZ+XQyEHVlnoJnHYpQg==';
$aliPay = new AlipayService($appid,$returnUrl,$notifyUrl,$saPrivateKey);
$payConfigs = $aliPay->doPay($payAmount,$outTradeNo,$orderName,$returnUrl,$notifyUrl);
class AlipayService
{protected $appId;protected $returnUrl;protected $notifyUrl;protected $charset;//私钥值protected $rsaPrivateKey;public function __construct($appid, $returnUrl, $notifyUrl,$saPrivateKey){$this->appId = $appid;$this->returnUrl = $returnUrl;$this->notifyUrl = $notifyUrl;$this->charset = 'utf8';$this->rsaPrivateKey=$saPrivateKey;}/*** 发起订单* @param float $totalFee 收款总费用 单位元* @param string $outTradeNo 唯一的订单号* @param string $orderName 订单名称* @param string $notifyUrl 支付结果通知url 不要有问号* @param string $timestamp 订单发起时间* @return array*/public function doPay($totalFee, $outTradeNo, $orderName, $returnUrl,$notifyUrl){//请求参数$requestConfigs = array('out_trade_no'=>$outTradeNo,'product_code'=>'QUICK_WAP_WAY','total_amount'=>$totalFee, //单位 元'subject'=>$orderName,  //订单标题);$commonConfigs = array(//公共参数'app_id' => $this->appId,'method' => 'alipay.trade.wap.pay',             //接口名称'format' => 'JSON','return_url' => $returnUrl,'charset'=>$this->charset,'sign_type'=>'RSA2','timestamp'=>date('Y-m-d H:i:s'),'version'=>'1.0','notify_url' => $notifyUrl,'biz_content'=>json_encode($requestConfigs),);$commonConfigs["sign"] = $this->generateSign($commonConfigs, $commonConfigs['sign_type']);return $commonConfigs;}public function generateSign($params, $signType = "RSA") {return $this->sign($this->getSignContent($params), $signType);}protected function sign($data, $signType = "RSA") {$priKey=$this->rsaPrivateKey;$res = "-----BEGIN RSA PRIVATE KEY-----\n" .wordwrap($priKey, 64, "\n", true) ."\n-----END RSA PRIVATE KEY-----";($res) or die('您使用的私钥格式错误,请检查RSA私钥配置');if ("RSA2" == $signType) {openssl_sign($data, $sign, $res, version_compare(PHP_VERSION,'5.4.0', '<') ? SHA256 : OPENSSL_ALGO_SHA256); //OPENSSL_ALGO_SHA256是php5.4.8以上版本才支持} else {openssl_sign($data, $sign, $res);}$sign = base64_encode($sign);return $sign;}/*** 校验$value是否非空*  if not set ,return true;*    if is null , return true;**/protected function checkEmpty($value) {if (!isset($value))return true;if ($value === null)return true;if (trim($value) === "")return true;return false;}public function getSignContent($params) {ksort($params);$stringToBeSigned = "";$i = 0;foreach ($params as $k => $v) {if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {// 转换成目标字符集$v = $this->characet($v, $this->charset);if ($i == 0) {$stringToBeSigned .= "$k" . "=" . "$v";} else {$stringToBeSigned .= "&" . "$k" . "=" . "$v";}$i++;}}unset ($k, $v);return $stringToBeSigned;}/*** 转换字符集编码* @param $data* @param $targetCharset* @return string*/function characet($data, $targetCharset) {if (!empty($data)) {$fileType = $this->charset;if (strcasecmp($fileType, $targetCharset) != 0) {$data = mb_convert_encoding($data, $targetCharset, $fileType);}}return $data;}
}
function isWeixin(){if ( strpos($_SERVER['HTTP_USER_AGENT'],'MicroMessenger') !== false ) {return true;}return false;
}
$queryStr = http_build_query($payConfigs);
if(isWeixin()):
?>
<script type="text/javascript" src="ap.js"></script>
<script>var gotoUrl = 'https://openapi.alipay.com/gateway.do?<?=$queryStr?>';_AP.pay(gotoUrl);
</script>
<?phpelse:header("Location:https://openapi.alipay.com/gateway.do?{$queryStr}");endif;
?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_748219.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10张图带你看懂大型网站架构演变

往期精选● 架构师高并发高性能分布式教程(4000G)● 39阶段精品云计算大数据实战视频教程● 200本经典编程相关书籍下载● 互联网技术干货视频教程大全● 两套大型电商实战项目● 程序员如何制作高质量的简历【视频简历】更多精彩查看历史记录.........一个普通的网站发展…

10 个神奇的网站,助力带薪摸鱼

前言 在日常工作中&#xff0c;为了提高工作时的效率&#xff0c;我常常会在闲暇时光去网上冲冲浪&#xff0c;寻找那些能够给我工作工作带来帮助的网站或者 APP。而随着时间的推移&#xff0c;我的收藏夹藏货越来越满了。秉承着独乐乐不如众乐乐&#xff0c;就想着随便挑几个…

有了这几个刷题网站,还愁跳槽不涨薪?

前言 刚学习编程时&#xff0c;你是不是很烦恼该去哪儿找找题目来练习下&#xff0c;看看自己学的怎么样。有或者在找工作时&#xff0c;需要准备面试&#xff0c;但是又不知道该去哪儿刷题&#xff1f;针对这个情况&#xff0c;今天我就来给大家分享几个可以在线练习算法和面…

《机器学习实战》第二章 2.2用k-近邻算法改进约会网站的配对效果

《机器学习实战》系列博客主要是实现并理解书中的代码&#xff0c;相当于读书笔记了。毕竟实战不能光看书。动手就能遇到许多奇奇怪怪的问题。博文比较粗糙&#xff0c;需结合书本。博主边查边学&#xff0c;水平有限&#xff0c;有问题的地方评论区请多指教。书中的代码和数据…

网站接入微信扫码登录并获取用户基本信息(微信开放平台)

现在的网站基本都接入微信登陆了&#xff0c;就好像下面这样的。 只需要用微信扫一下二维码&#xff0c;这个网站就可以展示你的微信昵称和头像&#xff0c;免去注册账号和输入密码登录的步骤&#xff0c;还免去设置头像和昵称的步骤&#xff0c;所以是挺方便的。 那么如何把自…

我的网站搭建: (第二天) 数据库选型

2019独角兽企业重金招聘Python工程师标准>>> 上一篇记录的是模型设计&#xff0c;也就是博客展示的基本功能&#xff0c;那么这些模型在进行数据迁移的时候就会产生数据。如何有效地保存好这些数据&#xff0c;这就是每一个开发者都值得去斗智斗勇的一件事&#xff…

推荐一个有趣的Chrome扩展程序-查看任意网站的开发技术栈

对于前端开发人员来说&#xff0c;目前的前端框架层出不穷&#xff0c;最受欢迎的莫过于所谓的前端框架三驾马车&#xff1a;Angular&#xff0c; React和Vue。在学习的过程中&#xff0c;肯定好奇现在的互联网公司的网站用的何种前端框架来开发的。 Chrome扩展程序商店里就提供…

如何免费的让网站启用HTTPS

点击上方蓝色字体&#xff0c;选择“置顶公众号”优质文章&#xff0c;第一时间送达来源&#xff1a;https://coolshell.cn/(酷壳网)今天&#xff0c;我把CoolShell变成https的安全访问了。我承认这件事有点晚了&#xff0c;因为之前的HTTP的问题也有网友告诉我&#xff0c;被国…

实现网站图片瀑布流重点记录

在前端通过js完成对瀑布流的实现&#xff0c;很简单&#xff0c;主要对前端很多知识不熟悉&#xff0c;在此做个记录&#xff0c;数据库中数据只添加了14张照片&#xff0c;通过重复取这14张照片模拟从数据库中取大量图片 主要的注意点在于initImg函数中&#xff0c;每次滑动到…

5个鲜为人知的黑科技网站,强大到不敢想象

作者&#xff1a;王嘻嘻_5578原文&#xff1a;http://suo.im/4vRcCZ如今的网站是越来越多&#xff0c;但许多黑科技网站却是不为人知&#xff0c;其实现在的网站都跟APP的功能相似&#xff0c;甚至许多好网站会比APP的作用更强更全面。今儿给亲们分享五款黑科技网站&#xff0c…

我是如何在两天内做完一个网站的

来源:http://suo.im/5eyK0X有点标题党的嫌疑&#xff0c;不过确实网站的主体是在两天内的完成的&#xff0c;后面只是抓取了素材和完善细节。以下内容绝对是赤裸裸的干货。**网站前期的准备&#xff1a; **1、买域名2、租服务器3、编写网站代码总体就这三步&#xff0c;但是每一…

使用Bootstrap 3开发响应式网站实践07,页脚

页脚部分比较简单&#xff0c;把一个12列的Grid切分。<footer><div class"container"><div class"row"><div class"col-sm-2"><h6>Copyright ©新浪体育</h6></div><div class"col-sm-4&…

高并发高流量网站架构

Web2.0的兴起&#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念&#xff0c;细分了网站功能和用户群&#xff0c;不仅成功的造就了一大批新生的网站&#xff0c;也极大的方便了上网的人们。但Web2.0以用户为导向的理念&#xff0c;使得新生的网站有…

10个程序员需要收藏的良心网站,你绝对没有用过

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达上一篇&#xff1a;这300G的Java资料是我师傅当年给我的&#xff0c;免费分享给大家&#xff08;已修复&#xff09;下一篇&#xff1a;昨天分享资料不小心把百度网盘深处的秘密泄露了&#xf…

快速建站利器!Github 上 10 个开源免费的后台控制面板

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达上一篇&#xff1a;这300G的Java资料是我师傅当年给我的&#xff0c;免费分享给大家&#xff08;已修复&#xff09;下一篇&#xff1a;昨天分享资料不小心把百度网盘深处的秘密泄露了&#xf…

CSDN网站阅读更多:实现原理

一 设计案例 现在很多网站都增加了阅读更多功能。以CSDN为例&#xff0c;分析其实现原理。 二 设计原理 1 内容区的初始高度是固定的。 2 背景渐变的操作区&#xff0c;遮盖在内容区上面 3 点击按钮时&#xff0c;解除内容区的高度限制&#xff0c;同时移除操作区 三 模拟实现 …

这些网站利用起来,睡前双休时间都能赚点零花钱!

出来工作&#xff0c;说白了都是为了钱&#xff0c;什么理想&#xff0c;梦想&#xff0c;有了钱再说吧&#xff01; 很多朋友做着普通的工作&#xff0c;拿着微薄的工资&#xff0c;在这个大城市摸爬滚打&#xff0c;发现&#xff0c;钱总是不够用&#xff01; 有时会抱怨“为…

交公粮了:我经常逛的技术网站

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达zuo关注公众号后台回复pay或mall获取实战项目资料视频作者&#xff1a;三分恶来源&#xff1a;cnblogs.com/three-fighter/p/13641835.html众所周知&#xff0c;程序员是一个需要不断学习的职业…

用Nginx禁止国外IP访问我的网站...

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达关注公众号后台回复pay或mall获取实战项目资料视频作者&#xff1a;运维小弟出处&#xff1a;toutiao.com/i6860736292339057156/先来说说为啥要写这篇文章&#xff0c;之前看了下 Nginx 的访问…

又一神器,输入网址,点击下一步,瞬间克隆一个网站...!

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达关注公众号后台回复pay或mall获取实战项目资料视频HTTrack是一个免费的网站克隆工具。它允许您将Internet上的万维网站点下载到本地目录&#xff0c;以递归方式构建所有目录&#xff0c;并从服…