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

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

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

一个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. JSP脚本 9大内置对象
  2. scanf_s 发送访问冲突_程序员如何解决并发冲突的难题?
  3. java 自旋锁_java锁的种类以及辨析(一):自旋锁
  4. latex的资料ftp
  5. LINUX下用脚本实现JDK+TOMCAT
  6. php mysql 快餐_用PHP+MYSQL做一个简单的点餐系统的后台,初学者. 请高手指点下如何实现后台添加菜名 餐馆 价格...
  7. BZOJ 4241 分块
  8. Django之templates模板
  9. 百叶窗式的幻灯片切换效果原理
  10. .net core读取appsettings.json配置信息、自定义json文件、自定义xml文件
  11. 软考-网络工程师复习资料
  12. Android系统源码编译
  13. 大佬们用代码写的故事
  14. 如何使用MISRA改进嵌入式编程
  15. 开源分销系统java_Java版Spring Boot Spring Cloud B2B2C电子商务-分销系统
  16. css box-sizing
  17. 华泰证券:“融券通”是何阳谋?
  18. 壮游奇迹哪个服务器稳定,壮游奇迹MU官方选哪个区好呢?
  19. 单片机数字钟(调时,调时闪烁,万年历,年月日)超详细解析
  20. linux设置mysql防火墙端口映射_Linux防火墙默认是关闭3306端口,iptables实现端口转发、端口映射及双向通路...

热门文章

  1. 操作系统和网络(七):linux硬件基础知识
  2. 虚拟机搭建单机版Hadoop教程(惨痛经历)
  3. 【尚硅谷_java基础】七、面向对象(下)
  4. python 数学期望_数学期望
  5. 实际项目中的工作流工作原理
  6. 【牛客刷题日记】— Javascript 通关秘籍(2)
  7. ANSYS Workbench 18.0结构强度刚度与轻量化分析视频教程
  8. 微信小程序查看通讯录 联系人
  9. ART世界探险(5) - 计算指令
  10. 你所不知道的noscript标签