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

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

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

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


在微信中打开实现效果

注:兼容微信浏览器需依赖支付宝官方提供的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/291/105971
2.2 https://docs.open.alipay.com/200/105310

代码

<?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;
?>

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

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

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

  2. 手机浏览器只保存php文件夹,一个PHP文件搞定支付宝系列之手机网站支付(兼容微信浏览器)...

    网上的很多PHP支付宝支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入支付宝支付的带来些许帮助和借鉴意义. 在手机浏览器下打开实现效果 在微信 ...

  3. php支付宝系列之电脑网站支付,一个PHP文件搞定支付宝之电脑网站支付

    本篇文章给大家分享的内容是关于用一个PHP文件搞定支付宝之电脑网站支付 ,有需要的朋友可以参考一下 网上的很多PHP支付宝支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文 ...

  4. 一个PHP文件搞定支付宝现金红包

    B2C现金红包流程: 1.调用统一转账接口(alipay.fund.trans.uni.transfer)将资金从发起请求的商户支付宝账户余额打款给领取红包的人. 2.可以通过转账业务单据查询接口(a ...

  5. 支付宝沙箱测试手机网站支付,提示商户合作协议已到期,无法继续使用

    问题:大家好,我的php支付宝沙箱测试手机网站支付,提示商户合作协议已到期,无法继续使用,进行pc电脑网站支付都正常,手机网站支付却不行,请问这个是什么原因呢? 回答: 说明:   这个报错是出现在沙 ...

  6. 支付宝接口开发-手机网站支付-沙箱测试

    前面一段时间,因为公司业务需求,需要使用支付宝的手机网站支付接口,因为自己也是第一次使用这个,中间走了不少弯路,现在总结一下,希望对遇到同样问题的朋友有帮助. 第一步:登录蚂蚁金服开放平台蚂蚁金服开放 ...

  7. 支付宝网站支付在微信浏览器中跳转问题(亲测,附源码)

    文章目录 前言 具体步骤 配置沙箱回调地址,修改代码支付宝网关 准备加密js以及跳转html 源码下载地址 前言 奉上整理好的测试url: 点我调用支付宝 之前的博客中提到了使用支付宝提供的sdk实现 ...

  8. 支付开发(七)----支付宝开发之手机网站支付(H5支付)

    其实官方的文档中:https://docs.open.alipay.com/203 介绍的已经很详细了,我就实地的看文档操作了一遍,具体步骤如下: 一.创建应用 流程如下: 首先要有支付宝开放平台: ...

  9. 电商微信小程序(教你一个页面一个数据接口搞定所有分类订单页面(未支付 未发货 已发货 全部订单))

    注:解析主要都在注释里面 1.mysql建表思路 1.1最重要的是状态码,如果之前没有添加字段state,可以通过以下方式 -- 添加字段(规定只能规定为 未支付.未发货.已发货) ALTER TAB ...

最新文章

  1. RDKit | 基于随机森林的化合物活性二分类模型
  2. PHP中使用cURL实现Get和Post请求的方法
  3. OGNL是Object-Graph Navigation Language
  4. Web 应用客户端渲染和服务器端渲染的比较
  5. 孙甘露:小说是他的女人,写作是他爱女人的过程
  6. 华为服务器芯片总在pc,服务器芯片 华为
  7. .NET:如何让线程支持超时?
  8. gcn在图像上的应用_每日摘要|基于CNN 特征的图像卷积网络识别杂草和作物
  9. 用python 画炫酷的图并讲解-Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢?...
  10. 讲解如何进行SNMP MIB的查看
  11. Java_键盘输入语句
  12. 挨踢攻城师必备的路由交换技术
  13. Oracle数据库连接池原理,数据库连接池的原理及实现
  14. 一键加速GitHub、Pypi、DockerHub访问
  15. STM32MP157(实验四)——串口通信(串口打印)
  16. 操作系统春招面试复习之:操作系统概述
  17. UR机器人双臂开发实例
  18. CNPC海外操作人员英语日常用语900句
  19. 这一个月的可能用到的便签
  20. 华为Ascend昇腾CANN详细教程(二)

热门文章

  1. java基于springboot+vue的汽车租赁系统-在线租车
  2. execl的常用函数
  3. C++/数据结构——课程设计——回合制对战小游戏
  4. 网站形象与企业发展潜力 -- 由上海地铁10号线发生追尾事故说开去
  5. postgres主备库切换测试
  6. matlab 对比汉字,Matlab汉字识别:同样的特征如粗网格,BP和RBF的训练差异
  7. 软件工程IT项目管理复习之 六:项目时间管理
  8. linux修改文件夹磁盘,linux下修改磁盘卷标
  9. 非常详细的共模电感及滤波器的设计!(转载)
  10. 爱了爱了!GitHub7200星,一个可以听全网无损音乐的神器