系统中配置如下
<?php $config = array ( //支付宝公钥 'alipay_public_key' => "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB", //商户私钥 'merchant_private_key' => "MIICXAIBAAKBgQCyffRONGd8Q/1kRh1cpsSRi360DXLHI7zxdPJGYe5HKDWF7u9b3zZU9erZpM90XE7gZRKsxIgOurH4uqhmVRbto3e+LiYOyNpd6As3Q427KCTIT7ajhHicZ6GWhegTUiVLqiuWLsauQcbI6DO4GEZrlvAdzus0WcJiJOxW02rxSQIDAQABAoGAXBJYyVaC4zj3Jph8YOStlR5N13bwdATdW/glWWT+0rnNEi90TQHRNvY7lNVNJgrPrTS182TVgjOPxmwSnebakhIuGIdPq99GLE4LGd5lKWTzkd84BMvhatfNsCCzcEVFqKg3tZd4t3fQ93FrILsnnZpLhiW53jIrStCkR3rx9OECQQDWMSHyc91hEVMQqVNasbGEicKWxhoDqjdm2lHkBx4mrB9JEZFDs6MxWdajf2/Qw+tgtpN3YBcCDw/HnGHhQtStAkEA1VTyjOdAwWode8X4fu0IPq9+E19mcVOAJjLBH46mropwgOdj3raqT/ThaKeaydjabsTAiY2J18HiTiyH+1bGjQJBAKgRJXH5OFxSG7uXIbCofYJiFi34g7EcfxxVcqxaaW4u4N2Uy0c0TXkL5T+lXzeQg8D/gfbJj0QuTVNzgdofdoECQBHYOznCFk6Xe8PguXqUhT4JG/iu4DjWjT+kuzbSjerHtcVylY4JpZFuoHRKoM4Fj6/4UUqwRjmABFgZrX4+sfkCQCNI8RCZ6yprh5kEOePo3uazAlNENP8dKkhgqChawdK77NzlJ727Nt23STHFx6NkhzyruJGQ5Vx1Lkl0wKuKbXM=", //编码格式 'charset' => "UTF-8", //支付宝网关 'gatewayUrl' => "https://openapi.alipay.com/gateway.do", //应用ID 'app_id' => "2016061501500000", //异步通知地址,只有扫码支付预下单可用 'notify_url' => "http://www.fangbei.org/alipay/notify.html", //最大查询重试次数 'MaxQueryRetry' => "10", //查询间隔 'QueryDuration' => "3" );
其中支付宝公钥就是在前面中复制保存的,直接复制到程序中即可,而商户私钥是之前OpenSSL中生成的私钥。APPID是该服务的id号。
而这个异步通知将会接收扫码支付结果的通知。
五、条码支付、扫码支付、订单查询、退款申请
1. 条码支付
条码支付的参数配置如下
// (必填) 商户网站订单系统中唯一订单号,64个字符以内,只能包含字母、数字、下划线,
// 需保证商户系统端不能重复,建议通过数据库sequence生成,
$outTradeNo = "barpay" . date('Ymdhis') . mt_rand(100, 1000);
$subject = "方倍工作室-支付宝-当面付-扫码支付";
$totalAmount = 0.01; // (必填) 订单总金额,单位为元,不能超过1亿元
// (必填) 付款条码,用户支付宝钱包手机app点击“付款”产生的付款条码
$authCode = $_POST['auth_code']; //28开头18位数字
// 支付超时,线下扫码交易定义为5分钟
$timeExpress = "5m";
// 创建请求builder,设置请求参数
$barPayRequestBuilder = new AlipayTradePayContentBuilder();
$barPayRequestBuilder->setOutTradeNo($outTradeNo);
$barPayRequestBuilder->setTotalAmount($totalAmount);
$barPayRequestBuilder->setAuthCode($authCode);
$barPayRequestBuilder->setTimeExpress($timeExpress);
$barPayRequestBuilder->setSubject($subject);
// 调用barPay方法获取当面付应答
$barPay = new AlipayTradeService($config);
$barPayResult = $barPay->barPay($barPayRequestBuilder);
switch ($barPayResult->getTradeStatus())
break;
case "UNKNOWN":
echo "系统异常,订单状态未知!!!" . "<br>--------------------------<br>";
if (!empty($barPayResult->getResponse()))
break;
default:
echo "不支持的交易状态,交易返回异常!!!";
break;
}
return;
}
程序监测,最终提交的url如下
https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=RSA&method=alipay.trade.pay×tamp=2016-08-26+17%3A14%3A52&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=&charset=UTF-8&app_auth_token=&sign=EMVoBAhPkW6B1m%2BoXytdbUpIxnIAq73jtiPhlH2VUYy4OcJQ2UiVTXWttw0y%2B7UEXHWILY8fYRDoNrJWSjBATrAqbGCLpPc4YBQSwtPCb%2F76d65dMQEyrEnk2sgcqhxCiJNKRoQjgAQmBQdHneerU7SwSNJ%2FfF%2F025yltZk5lzQ%3D
发送的json数据如下:
{
"scene":"bar_code",
"out_trade_no":"barpay20160826051452680",
"total_amount":0.01,
"auth_code":"289743098358423535",
"timeout_express":"5m",
"subject":"方倍工作室-支付宝-当面付-扫码支付"
}
接收到的数据如下
{
"alipay_trade_pay_response":{
"code":"10000",
"msg":"Success",
"buyer_logon_id":"118***@qq.com",
"buyer_pay_amount":"0.01",
"buyer_user_id":"2088002364008751",
"fund_bill_list":[
{
"amount":"0.01",
"fund_channel":"ALIPAYACCOUNT"
}
],
"gmt_payment":"2016-08-26 17:14:59",
"invoice_amount":"0.01",
"open_id":"20880044751374809757987911112575",
"out_trade_no":"barpay20160826051452680",
"point_amount":"0.00",
"receipt_amount":"0.01",
"total_amount":"0.01",
"trade_no":"2016082621001004750244100034"
},
"sign":"pEDeMwh6x73t9LmWrZpGnVb1npnKtODw6+8MDUTurNPVWXR1JHT+x3cRt2G4SDNHzxkJTzSpUXjNylsWisRTnQJJzqRP5XMujxmaAHP/d5xXeyWasDag5Cj7yGD7t80buDAsdE4eoqQ6ox7KzJ6LwKcphOX13tI+Ukt1dGCQS5o="
}
2. 扫码支付
扫码支付的参数配置如下
// (必填) 商户网站订单系统中唯一订单号,64个字符以内,只能包含字母、数字、下划线,
// 需保证商户系统端不能重复,建议通过数据库sequence生成,
$outTradeNo = "qrpay".date('Ymdhis').mt_rand(100,1000);
$subject = "方倍工作室-支付宝-当面付-扫码支付";
$totalAmount = "0.01";
// 支付超时,线下扫码交易定义为5分钟
$timeExpress = "5m";
// 创建请求builder,设置请求参数
$qrPayRequestBuilder = new AlipayTradePrecreateContentBuilder();
$qrPayRequestBuilder->setOutTradeNo($outTradeNo);
$qrPayRequestBuilder->setTotalAmount($totalAmount);
$qrPayRequestBuilder->setTimeExpress($timeExpress);
$qrPayRequestBuilder->setSubject($subject);
// 调用qrPay方法获取当面付应答
$qrPay = new AlipayTradeService($config);
$qrPayResult = $qrPay->qrPay($qrPayRequestBuilder);
// 根据状态值进行业务处理
switch ($qrPayResult->getTradeStatus())
break;
case "UNKNOWN":
echo "系统异常,状态未知!!!"."<br>--------------------------<br>";
if(!empty($qrPayResult->getResponse()))
break;
default:
echo "不支持的返回状态,创建订单二维码返回异常!!!";
break;
}
生成的提交请求URL如下
https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=RSA&method=alipay.trade.precreate×tamp=2016-08-26+17%3A38%3A13&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=http%3A%2F%2F123.daoqidata.com%2Fweixin%2Frawpost.php&charset=UTF-8&app_auth_token=&sign=ayYiJRZ63RomVEt8Ayz58Uiyv3y5IrbbX8CTfX6zNHkT%2Fu11U7ISUYWCXjrwrwCo2Oq2tdo%2FjtuhrBbDp5ULnTmuBBUktQDCCF53PF5yiUDGikxUPFYugeUrTg3gw4DqxOiNKM6ZB6MI0n%2F9M78a%2FnP8GtZ4WthyHIl%2B%2FozSyT4%3D
发送的json数据如下:
{
"out_trade_no":"qrpay20160826053813582",
"total_amount":"0.01",
"timeout_express":"5m",
"subject":"方倍工作室-支付宝-当面付-扫码支付"
}
返回的数据如下:
{
"alipay_trade_precreate_response":{
"code":"10000",
"msg":"Success",
"out_trade_no":"qrpay20160826053813582",
"qr_code":"https://qr.alipay.com/bax00885xbhszseo9l7p404d"
},
"sign":"VfNTGo2WMZ+2CE1L05lNYWtFn4inHXO/tUaBZIBHN4fPlXnCvyc9IhS8S7wa3FYw23G30luEPEHkZWobnfpUjILonmExZVElHv3ylINz+Q2mQ5M8Sb/d61YPvf4Bgy1OvlrT4D3H/i3judmzEDBrOyFN9kB9vSkKaYC+b6L41Zw="
}
其中的https://qr.alipay.com/bax00885xbhszseo9l7p404d 就是二维码链接地址,使用接口将其成二维码后。
当支付宝用户扫码的时候,接口通知将收到如下数据
当用户输入密码付款成功之后,将收到如下数据
{
"fund_bill_list":"[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]",
"subject":"方倍工作室-支付宝-当面付-扫码支付",
"trade_no":"2016082621001004750241229810",
"gmt_create":"2016-08-26 18:20:37",
"notify_type":"trade_status_sync",
"total_amount":"0.01",
"out_trade_no":"qrpay20160826062009757",
"invoice_amount":"0.01",
"open_id":"20880044751374809757987911112575",
"seller_id":"2088421202724253",
"notify_time":"2016-08-26 18:20:50",
"trade_status":"TRADE_SUCCESS",
"gmt_payment":"2016-08-26 18:20:50",
"seller_email":"pay***@fangbei.org",
"receipt_amount":"0.01",
"buyer_id":"2088002364008751",
"app_id":"2016061501500000",
"notify_id":"56f97611ee609f46384b188b409e75else",
"buyer_logon_id":"118***@qq.com",
"sign_type":"RSA",
"buyer_pay_amount":"0.01",
"sign":"nf/KJryACk0utqlNrnuYMiSnYw6HsxqpJPk2O5MhCZ+wZUVQbrD3sq5POO3GU7LSRoSiUUIO4JEYEL12Ek2+w3lTcLS9WEi60sYowPOcJEYGmVfNZbVR6+k7yO5au2WIkM3MKsxm2XxIB9xPMmRDACGhvqZ2BXUAQujkPk1FT0s=",
"point_amount":"0.00"
}
3. 订单查询
订单查询的参数配置如下
////获取商户订单号 $out_trade_no = trim($_POST['out_trade_no']); //第三方应用授权令牌,商户授权系统商开发模式下使用 $appAuthToken = "";//根据真实值填写 //构造查询业务请求参数对象 $queryContentBuilder = new AlipayTradeQueryContentBuilder(); $queryContentBuilder->setOutTradeNo($out_trade_no); $queryContentBuilder->setAppAuthToken($appAuthToken); //初始化类对象,调用queryTradeResult方法获取查询应答 $queryResponse = new AlipayTradeService($config); $queryResult = $queryResponse->queryTradeResult($queryContentBuilder); //根据查询返回结果状态进行业务处理 switch ($queryResult->getTradeStatus()) break; case "UNKNOWN": echo "系统异常,订单状态未知!!!"."<br>--------------------------<br>"; if(!empty($queryResult->getResponse())) break; default: echo "不支持的查询状态,交易返回异常!!!"; break; }
最终提交的url如下
https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=RSA&method=alipay.trade.query×tamp=2016-08-26+18%3A27%3A07&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=&charset=UTF-8&app_auth_token=&sign=eIuYJtes95quAN3X9eXbQzBa%2FCvm5QgQ0ToUsS8MSkCjhZACYpnU7ZT5MuD31lPZPFHVEjCKsdWiq4tuNtJPFPxirg7pkTiT09C%2Bz8PsUA844Y7hjkkX%2B4CVZcGtO11m3Ap0JECrtZW8hhJTE9bPY1v43X2BSL5Cp3Ulpac1FsM%3D
发送的json数据如下:
{
"out_trade_no":"qrpay20160826053813582"
}
接收到的数据如下
{
"alipay_trade_query_response":{
"code":"10000",
"msg":"Success",
"buyer_logon_id":"118***@qq.com",
"buyer_pay_amount":"0.01",
"buyer_user_id":"2088002364008751",
"fund_bill_list":[
{
"amount":"0.01",
"fund_channel":"ALIPAYACCOUNT"
}
],
"invoice_amount":"0.01",
"open_id":"20880044751374809757987911112575",
"out_trade_no":"qrpay20160826053813582",
"point_amount":"0.00",
"receipt_amount":"0.01",
"send_pay_date":"2016-08-26 17:38:58",
"total_amount":"0.01",
"trade_no":"2016082621001004750239053830",
"trade_status":"TRADE_SUCCESS"
},
"sign":"E2MxjdAhW/EqRFNkZgy/Y//dA5Cmb54Hnqa0cjBz+ZcFTULi1lvFms93onP7cpVK/fI7YxbkZTKBPk29o4aeWKXlSYCrT92domAyqahzYCA7/5A3Msc/awALYrFOdWyJJdlncWdFRN9hx52iVRIjxvLJ0hIMVIQqEDavG28HPbo="
}
4. 订单退款
订单退款的参数配置如下
$out_trade_no = trim($_POST['out_trade_no']); $refund_amount = trim($_POST['refund_amount']); $out_request_no = trim($_POST['out_request_no']); //第三方应用授权令牌,商户授权系统商开发模式下使用 $appAuthToken = "";//根据真实值填写 //创建退款请求builder,设置参数 $refundRequestBuilder = new AlipayTradeRefundContentBuilder(); $refundRequestBuilder->setOutTradeNo($out_trade_no); $refundRequestBuilder->setRefundAmount($refund_amount); $refundRequestBuilder->setOutRequestNo($out_request_no); $refundRequestBuilder->setAppAuthToken($appAuthToken); //初始化类对象,调用refund获取退款应答 $refundResponse = new AlipayTradeService($config); $refundResult = $refundResponse->refund($refundRequestBuilder); //根据交易状态进行处理 switch ($refundResult->getTradeStatus()) break; case "UNKNOWN": echo "系统异常,订单状态未知!!!"."<br>--------------------------<br>"; if(!empty($refundResult->getResponse())) break; default: echo "不支持的交易状态,交易返回异常!!!"; break; }
最终提交的url如下
https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=RSA&method=alipay.trade.refund×tamp=2016-08-26+18%3A47%3A35&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=&charset=UTF-8&app_auth_token=&sign=Y1c5qWglAQ0t3brViEtqFnIJRQMn%2Fl9vMla1xgXKcExercJopMyS2rPOHaw%2F2PJEOKJC7r9qAfDGkNq4LHzXhBrD8sxLPqImPS6aWcW9p8s%2FzC2oQCJnLfaPx6lh8veHarj4WzDayeZLA48ttoQLjuMGPrITgOXYjHHyUKdBqSs%3D
发送的json数据如下:
{
"out_trade_no":"qrpay20160826053813582",
"refund_amount":"0.01",
"out_request_no":"1"
}
接收到的数据如下
{
"alipay_trade_refund_response":{
"code":"10000",
"msg":"Success",
"buyer_logon_id":"123***@qq.com",
"buyer_user_id":"2088002364008751",
"fund_change":"Y",
"gmt_refund_pay":"2016-08-26 18:47:41",
"open_id":"20880044751374809757987911112575",
"out_trade_no":"qrpay20160826053813582",
"refund_detail_item_list":[
{
"amount":"0.01",
"fund_channel":"ALIPAYACCOUNT"
}
],
"refund_fee":"0.01",
"send_back_fee":"0.01",
"trade_no":"2016082621001004750239053830"
},
"sign":"YDNSMpX5y0rQEs0ZbfNxRFVIp8hf0W30OR74cMtwKVPO2BYee6TQC+pbnwESSZ2XSGLozTyy7o+SIa07L+FMhDv/PTt6QX1mVgQv7RhzoDkls0zDRS/5/fy9Oyj01XS1wb8Od/93iNLZDkd2yw9g0He6qGYlpcXutkmwuASd7BM="
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。








