<?php
header('Content-type:text/html; Charset=utf-8');
$appid
= 'xxxxx';
$returnUrl
= 'http:
$notifyUrl
= 'http:
$outTradeNo
= uniqid();
$payAmount
= 0.01;
$orderName
= '支付测试';
$signType
= 'RSA2';
$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
;
}
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);
}
else
{
openssl_sign(
$data
,
$sign
,
$res
);
}
$sign
=
base64_encode
(
$sign
);
return
$sign
;
}
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
;
}
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:
_AP.pay(gotoUrl);
</script>
<?php
else
:
header(
"Location:https://openapi.alipay.com/gateway.do?{$queryStr}"
);
endif
;
?>