支付宝回调,得到这样一个数组(数组只是形式,并不是真实数据)
array (
'discount' => '0.00',
'payment_type' => '1',
'subject' => '测试02',
'trade_no' => '201603122100106821',
'buyer_email' => '18776152065',
'gmt_create' => '2016-03-12 11:30:08',
'notify_type' => 'trade_status_sync',
'quantity' => '1',
'out_trade_no' => '1603125610283',
'seller_id' => '2088122451677261',
'notify_time' => '2016-03-13 11:54:40',
'body' => '测试02',
'trade_status' => 'TRADE_SUCCESS',
'is_total_fee_adjust' => 'N',
'total_fee' => '0.01',
'gmt_payment' => '2016-03-12 11:30:09',
'seller_email' => '[email protected]',
'price' => '0.01',
'buyer_id' => '2088612804',
'notify_id' => 'ba20b13f6lk2',
'use_coupon' => 'N',
'sign_type' => 'RSA',
'sign' => 'Bn6IEyE9=',
)然后ksort()排序,去除sign_type,sign,拼接成body=Hello&buyer_email=13788888888&buyer_id=2088002007013600..............这样字符串openssl_verify(`拼接字符串`, base64_decode($_POST['sign']), $publickey);总返回 0 ,验证不成功,是哪一步出错
array (
'discount' => '0.00',
'payment_type' => '1',
'subject' => '测试02',
'trade_no' => '201603122100106821',
'buyer_email' => '18776152065',
'gmt_create' => '2016-03-12 11:30:08',
'notify_type' => 'trade_status_sync',
'quantity' => '1',
'out_trade_no' => '1603125610283',
'seller_id' => '2088122451677261',
'notify_time' => '2016-03-13 11:54:40',
'body' => '测试02',
'trade_status' => 'TRADE_SUCCESS',
'is_total_fee_adjust' => 'N',
'total_fee' => '0.01',
'gmt_payment' => '2016-03-12 11:30:09',
'seller_email' => '[email protected]',
'price' => '0.01',
'buyer_id' => '2088612804',
'notify_id' => 'ba20b13f6lk2',
'use_coupon' => 'N',
'sign_type' => 'RSA',
'sign' => 'Bn6IEyE9=',
)然后ksort()排序,去除sign_type,sign,拼接成body=Hello&buyer_email=13788888888&buyer_id=2088002007013600..............这样字符串openssl_verify(`拼接字符串`, base64_decode($_POST['sign']), $publickey);总返回 0 ,验证不成功,是哪一步出错
//合作身份者id,以2088开头的16位纯数字
$alipay_config['partner'] = '';
//收款支付宝账号
$alipay_config['seller_email'] = ’‘;
//安全检验码,以数字和字母组成的32位字符
$alipay_config['key'] = '';
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//签名方式 不需修改
$alipay_config['sign_type'] = strtoupper('MD5');
//字符编码格式 目前支持 gbk 或 utf-8
$alipay_config['input_charset'] = strtolower('utf-8');
//ca证书路径地址,用于curl中ssl校验
//请保证cacert.pem文件在当前文件夹目录中
$alipay_config['cacert'] = ‘/rsa_private_key.pem';
//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
$alipay_config['transport'] = 'http';配置好这些参数,直接调用$aliPayNotify->verifyNotify()就行了。确定你异步回调的地址是外网,支付宝能访问到的。。
require "/path/to/sdk/php";//引入逻辑函数
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
if($verify_result)
{
if(!empty($_POST['out_trade_no']))
{
$trade_status=$_POST['trade_status'];
if ($trade_status == 'TRADE_SUCCESS')
{
$result = function() // 你的业务逻辑,当操作成功的时候返回true
if ($result)
{
echo "success"; //请不要修改或删除
}
else
{
echo 'fail';
}
}
elseif($trade_status == 'TRADE_FINISHED')
{
echo "success"; //请不要修改或删除
}
}
}