支付宝服务器停止响应,支付宝移动支付,服务端对异步通知信息验签的时候验签失败...

支付宝异步通知数据形式如下,

$arr=array (

'discount' => '0.00',

'payment_type' => '1',

'subject' => '测试02',

'trade_no' => '2016031.............2958619',

'buyer_email' => '18776152065',

'gmt_create' => '2016-03-14 17:04:52',

'notify_type' => 'trade_status_sync',

'quantity' => '1',

'out_trade_no' => '16031238100064254059',

'seller_id' => '2099122451677261',

'notify_time' => '2016-03-14 17:04:53',

'body' => '测试02',

'trade_status' => 'TRADE_SUCCESS',

'is_total_fee_adjust' => 'N',

'total_fee' => '0.01',

'gmt_payment' => '2016-03-14 17:04:52',

'seller_email' => 'xxx@126.com',

'price' => '0.01',

'buyer_id' => '2065912804441725',

'notify_id' => '2cf4b6638.............c176e3f3lk2',

'use_coupon' => 'N',

'sign_type' => 'RSA',

'sign' => 'Q3uCDyyCs/nODpHaUeCb1HqGINlQ3AxOr40MUN.............Br40MU=',

)

对数组按KEY首字母排序

ksort($arr);

按官方文档做法,排除掉sign_type,sign然后拼成下面形式的待签名支付串 $SemiFinishedSign

body=Hello&buyer_email=13788888888&buyer_id=2088002007013600

.................................................................................

trade_no=2014040311001004361525&trade_status=TRADE_FINISHED&use_coupon=N

执行下面代码验签!

$pukey=file_get_contents('alipay_public_key.pem');

$publickey=openssl_pkey_get_public($pukey);

$verify=(bool)openssl_verify($SemiFinishedSign, base64_decode($arr['sign']), $publickey);

echo $verify?'验签成功':'验签失败';

用于支付的公私钥都没有问题,对任意字符,openssl_sign();openssl_verify();都能通过

但是验签总是失败,求指导!!

--------------------------更新 2016-03-15-----------------------------------------

已解决,文档中说,验签用的是支付宝公钥,并不是RSA公钥,申请接口的人没有给我支付宝公钥,我一直以为用RSA公钥,我用错了,

bVtuXF

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用支付宝支付服务,您需要先注册支付宝开发者账号并创建应用。然后,您可以使用支付宝提供的开发工具包进行开发。以下是一个简单的 PHP 代码示例,可用于生成支付宝付款二维码: ```php <?php require_once("alipay-sdk-PHP-20180104100456/AopSdk.php"); //引入支付宝SDK $aop = new AopClient(); $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';//支付宝网关 $aop->appId = '您的应用ID';//您的应用ID $aop->rsaPrivateKey = '您的应用私钥';//您的应用私钥 $aop->alipayPublicKey = '支付宝公钥';//支付宝公钥 $aop->apiVersion = '1.0'; $aop->signType = 'RSA2';//签名算法 //构造参数 $request = new AlipayTradePrecreateRequest(); $request->setBizContent("{" . " \"out_trade_no\":\"20150320010101001\"," . " \"total_amount\":\"88.88\"," . " \"subject\":\"Iphone6 16G\"," . " \"store_id\":\"NJ_001\"," . " \"timeout_express\":\"90m\"" . " }"); //请求预授权码 $result = $aop->execute($request); $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; $qrCodeUrl = $result->$responseNode->qr_code; //生成二维码 echo '<img src="http://qr.liantu.com/api.php?text='.urlencode($qrCodeUrl).'">'; ?> ``` 在以上示例中,您需要将“您的应用ID”、“您的应用私钥”和“支付宝公钥”替换为您自己的信息。此外,您还需要将“out_trade_no”、“total_amount”和“subject”替换为您的商品信息。最后,使用$qrcodeUrl生成二维码即可。 当用户扫描二维码并完成付款后,支付宝将发送回调通知到您的服务器。您可以使用相应的 SDK 处理这些通知,以便更新您的系统并将订单标记为已付款。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值