支付宝有一个大坑就是签名的生成,生成以后不知道是哪一个!
点击签名工具
点击生成密匙
这两个参数需要好好保存,很关键的,这个我的是乱写的
进行签名生成
生成好以后进行后台修改
这时候就开始接入支付宝的sdk
放入以后修改需要用到的路径(namespace xxx\xxx;)
终于开始代码了:
官方文档:
$aop =
new
AopClient ();
$aop->gatewayUrl =
'https://openapi.alipay.com/gateway.do'
;
$aop->appId =
'your app_id'
;
$aop->rsaPrivateKey =
'请填写开发者私钥去头去尾去回车,一行字符串'
;
$aop->alipayrsaPublicKey=
'请填写支付宝公钥,一行字符串'
;
$aop->apiVersion =
'1.0'
;
$aop->signType =
'RSA2'
;
$aop->postCharset=
'GBK'
;
$aop->format=
'json'
;
$request =
new
AlipayTradePayRequest ();
$request->setBizContent(
"{"
.
"\"out_trade_no\":\"20150320010101001\","
.
"\"scene\":\"bar_code\","
.
"\"auth_code\":\"28763443825664394\","
.
"\"product_code\":\"FACE_TO_FACE_PAYMENT\","
.
"\"subject\":\"Iphone616G\","
.
"\"buyer_id\":\"2088202954065786\","
.
"\"seller_id\":\"2088102146225135\","
.
"\"total_amount\":88.88,"
.
"\"discountable_amount\":8.88,"
.
"\"body\":\"Iphone616G\","
.
"\"goods_detail\":[{"
.
"\"goods_id\":\"apple-01\","
.
"\"goods_name\":\"ipad\","
.
"\"quantity\":1,"
.
"\"price\":2000,"
.
"\"goods_category\":\"34543238\","
.
"\"body\":\"特价手机\","
.
"\"show_url\":\"http://www.alipay.com/xxx.jpg\""
.
"}],"
.
"\"operator_id\":\"yx_001\","
.
"\"store_id\":\"NJ_001\","
.
"\"terminal_id\":\"NJ_T_001\","
.
"\"extend_params\":{"
.
"\"sys_service_provider_id\":\"2088511833207846\""
.
"},"
.
"\"timeout_express\":\"90m\""
.
"}"
);
$result = $aop->execute ( $request);
$responseNode = str_replace(
"."
,
"_"
, $request->getApiMethodName()) .
"_response"
;
$resultCode = $result->$responseNode->code;
if
(!
empty
($resultCode)&&$resultCode ==
10000
){
echo
"成功"
;
}
else
{
echo
"失败"
;
}
//$aop->rsaPrivateKey $aop->alipayrsaPublicKey 为刚开始是生成的两个字符串复制粘贴过来就行了
这时候需要对这段代码进行修改了
这种看着不舒服 用着也麻烦,很容易出错
//测试一下 看能不能保持进去
//引入必要的类
//转换格式
header("Content-type: text/html; charset=utf-8");
//订单名称,必填
$subject = '商品';
//付款金额,必填
$price = 0.01;//支付宝和微信不一样 不需要去乘100
$total_amount = (float)$price;//这里进行一个转换
//商品描述,可空
$body = '商品描述';
//超时时间
$timeout_express="1m";
$payRequestBuilder = new AlipayTradeWapPayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setTimeExpress($timeout_express);
//同步跳转(123.123.com换成自己域名)
$configs['return_url'] = "你的同步跳转地址,也就是通知页面";
$configs = array (
//应用ID,您的APPID。
'app_id' => "你的APPid",
//RSA2商户私钥,(换成自己私钥)查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝私钥。
'merchant_private_key' => "密匙",
//异步通知地址(123.123.com换成自己域名)
'notify_url' => "你的回调地址(这个很重要,关系到是否支付成功,和逻辑的处理)",
//编码格式(不要修改)
'charset' => "UTF-8",
//签名方式(根据你所有的签名方式)
'sign_type'=>"RSA2",
//支付宝网关(不要修改)
'gatewayUrl' => "https://openapi.alipay.com/gateway.do",
//RSA2支付宝公钥,(换成自己公钥)查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => "支付宝公钥",
);
$payResponse = new AlipayTradeService($configs);
$result=$payResponse->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);
这样支付就算可以了 这个时候就需要就行处理异步回调了
异步回调不需要解释太多,就是支付宝请求接口,验证是否是支付宝请求,解析传递参数是否是支付成功,进行对应的逻辑操作
//请入配置
//开始进行验签
$arr=$_POST;
$alipaySevice = new AlipayTradeService($config);
$alipaySevice->writeLog(var_export($_POST,true));
$result = $alipaySevice->check($arr);
if($result) {//验证成功
//商户订单号
$out_trade_no = $_POST['out_trade_no'];
//支付宝交易号
$trade_no = $_POST['trade_no'];
//交易状态
$trade_status = $_POST['trade_status'];
if($_POST['trade_status'] == 'TRADE_FINISHED') {//判断该笔订单是否在商户网站中已经做过处理
echo "fail";
}else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {//判断该笔订单是否在商户网站中已经做过处理
echo "fail";
}
//——请根据您的业务逻辑来编写程序——
echo "success"; //请不要修改或删除 需要返回给支付宝成功 这样支付就不要再次请求该接口
}else {
//验证失败
echo "fail"; //请不要修改或删除
}