PHP接入支付宝支付

来源:互联网 发布:友声电子称软件下载 编辑:程序博客网 时间:2024/06/10 05:26

支付宝有一个大坑就是签名的生成,生成以后不知道是哪一个!

微信截图_20171117102514.png

点击签名工具

image.png

点击生成密匙

微信截图_20171117102938.png

这两个参数需要好好保存,很关键的,这个我的是乱写的

进行签名生成

image.png

生成好以后进行后台修改

这时候就开始接入支付宝的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";//请不要修改或删除}