- 申请支付宝支付,获取appid,开发者私钥,开发者公钥,支付宝公钥
- 下载支付宝sdk : https://docs.open.alipay.com/54/106370/
- 核心代码,$setNotifyUrl是支付成功时的回调函数地址,url使用pathinfo模式
- 生成支付宝订单信息 php
if(!$appid || !$rsaPrivateKey || !$alipayrsaPublicKey || !$setNotifyUrl){
return false;
}
$total_amount = sprintf("%0.2f",floatval($total_amount)/100);
require_once APP_PATH."Lib/ORG/alipay-sdk-PHP/AopSdk.php";
$aop = new AopClient;
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = $appid;
$aop->rsaPrivateKey = $rsaPrivateKey;//开发者私钥
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA";
$aop->alipayrsaPublicKey = $alipayrsaPublicKey;//支付宝公钥
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$out_trade_no = time().rand(1000, 9999);
$bizcontent = "{\"body\":\"".$body."\","
. "\"subject\": \"".$subject."\","
. "\"out_trade_no\": \"".$out_trade_no."\","
. "\"timeout_express\": \"30m\","
. "\"total_amount\": \"0.01\","
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
. "}";
$request->setNotifyUrl($setNotifyUrl);
$request->setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
//$response = htmlspecialchars($response);
Log::write('alipay_response:'.print_r($response,true),log::INFO);
//echo $response;exit;//就是orderString 可以直接给客户端请求,无需再做处理。
if($response){
return $response;
}
return false;
$response即是APP调用时所需的支付宝订单信息,需返回到APP
- 支付宝回调函数
require_once APP_PATH."Lib/ORG/alipay-sdk-PHP/AopSdk.php";
$aop = new AopClient;
$aop->alipayrsaPublicKey = $alipay_public;//支付宝公钥
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA");
Log::write('支付宝支付校验结果:'.print_r($flag, true).' '.print_r($_POST, true));
APP端代码angular.js
支付宝的cordova插件其实在github上已经有很多了,但是都已经是以前的版本了。在2016年11月的时候支付宝进行了一次更新,支付宝的SDK升级到2.0版本。以前在app中使用支付宝进行支付叫做移动支付,11月之后更名为APP支付。
安装
cordova plugin add cordova-plugin-alipay-v2 --variable APP_ID=[your AppId]
//支付宝支付
$scope.alipay = function(payInfo,orderid,payment_type){
console.log('支付宝支付订单'+payInfo);
//唤起手机支付宝
cordova.plugins.alipay.payment(payInfo,
function success(e){
$scope.order_buy_result(orderid,payment_type);
console.log(e.resultStatus);
console.log(e.memo);
var alertPopup = $ionicPopup.alert({
title: '友情提示',
template: "<p style='text-align: center'>支付完成</p>",
okText: '确定', // String (默认: 'OK')。OK按钮的文字。
okType: 'button-assertive', // String (默认: 'button-positive')。OK按钮的类型。
});
alertPopup.then(function(res) {
//跳转到支付成功页面
$state.go("pay_success", {'orderid':orderid,'chongzhi_type':caozuo}, {reload:true});
return false;
});
},function error(e){
console.log(e.resultStatus);
console.log(e.memo);
}
);
}
//支付宝/微信支付成功回调验证(APP端根据需求回调验证)
$scope.order_buy_result = function(orderid,payment_type){
//发送请求到服务器
}