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

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

在微信中打开实现效果

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

环境依赖

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

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

注意事项

代码

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', '

} 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()):

?>

var gotoUrl = 'https://openapi.alipay.com/gateway.do?=$queryStr?>';

_AP.pay(gotoUrl);

else:

header("Location:https://openapi.alipay.com/gateway.do?{$queryStr}");

endif;

?>

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

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

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

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

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

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

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

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

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

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

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

  6. php 如何用op浏览器开发手机网站,PHP实现手机网站支付(兼容微信浏览器)

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

  7. 安卓手机Android文件夹下obb文件是什么,obb是什么文件?怎么使用obb文件夹

    类型:休闲益智大小:46.4M语言:英文 评分:5.0 标签: 立即下载 obb文件就是所谓的游戏数据包,只不过有的obb文件被压缩成了压缩文件.数据包的使用直接影响游戏的进程.下载数据包之后,可能还 ...

  8. 优效文件助手-【深度】都2021年了,你还只会用文件夹管理电脑文件?

    一.引言 对于大部分人来说,想要在电脑里快速找到自己想要的文件,并不是一件容易的事.如果你恰好不喜欢整理电脑,当电脑里出现了大量 [新建文件夹1].[新建文件夹2]--时,这时候你要找到某个文件就更加 ...

  9. 使用Python设计一个自动查询文件夹的exe文件

    使用Python设计一个自动查询文件夹的exe文件 文章目录 使用Python设计一个自动查询文件夹的exe文件 前言 一.消灭噩梦(~~摸鱼~~ )的开始 二.~~摸鱼~~ 效果升级--添加拷贝功能 ...

最新文章

  1. [CTSC2010]星际旅行
  2. 工作294:for[item.key]使用
  3. linux关机_Linux中shutdown,halt,poweroff,init 0区别
  4. Segmentation and Paging
  5. cloud源码-Ribbon
  6. 在CNN网络中1*1卷积的作用
  7. Spark RDD概念学习系列之Pair RDD的分区控制
  8. 15. POSIX 线程
  9. Spring源代码地址
  10. 如何通过站群提高网站曝光率
  11. 斩获微软offer后,我总结出这10个面试必备技巧(五星干货)
  12. 7、对数组中下标为奇(偶)数的元素进行操作
  13. 计算机专业群名有内涵,好听又有内涵的群名推荐 诗意有文化
  14. 最小二乘法的计算过程
  15. APP逆向案例之(二)对加固APP进行分析和破解
  16. 光模块(光口)和电模块(电口)
  17. mp4转gif在线转换,视频转换成gif动图怎么做?
  18. oracle pns配置,Fanuc机器人IO配置和UIUO配置.doc
  19. 探讨网站推广方式之论坛推广 [
  20. 安卓卡android不卡,安卓手机用久了卡顿,到底哪些东西是可以删掉的?

热门文章

  1. 几款好用的随机密码生成器
  2. 关于新手考CCF认证的一点心得新手注意
  3. PW4053M原厂芯片5V升压12.6V1A,三节串联锂电池充电管理板
  4. cytoscape遇到的坑
  5. Moonbeam生态说|探索波卡上的LSD
  6. 华为手机 Android Studio 启用WIFI调试配置支持Harmony
  7. 苹果手机最佳充电方式_别再错下去了!手机店老师傅告诉你,这才是手机充电的最佳方式...
  8. VMware安装苹果虚拟机解锁注意事项
  9. 我的世界java1.12种子_我的世界:1.12最值得收藏的10个地图种子,掠夺者,终界轻松找到...
  10. 经验、知识和信息是天生免费的东西吗?