5+APP 支付宝支付 功能介绍
在APP中要使用支付宝功能,需要在 支付宝开放平台申请相关支付功能:https://open.alipay.com/platform/home.htm
支付宝支付,相比微信支付简单多,不需要在APP客户端填写相关参数,直接在服务器端操作,返回相关参数到客户端,然后调起支付宝支付窗口。
支付宝比微信支付好,不需要重复申请,申请一个,多个应用共用都可以。
1.要使用支付宝支付功能,前端跟微信支付一样,勾选支付宝支付,支付宝不需要填写相关参数
2. 获得 5+APP 支付的方法,通过 plus.payment.getChannels 方法获取相关支付通道,如果勾选到微信支付和支付宝,它将会循环出来。
// 获取支付通道, 这里的支付通道,主要是官方支持的一些支付方法,可以在SDK配置,微信和支付宝相关参数
var pays=[]; //储存相关支付通道的信息
plus.payment.getChannels(function(channels)
{
for(var i in channels)
{
var channel=channels[i];
if(channel.id=='qhpay'||channel.id=='qihoo')
{ // 过滤掉不支持的支付通道
continue;
}
console.log("支付方式:"+channel.id); //
pays[channel.id]=channel;
}
});
3. 例如后端PHP 的支付宝API 生成相关参数返回前端,调起支付宝支付窗口
首页先下载支付宝的PHP 支付SDK文件,然后修改下相关参数
<?php
require_once ('AopSdk.php');
class Alipay
{
/**
* 应用ID
*/
const APPID = '2018012402052286';
/**
*请填写开发者私钥去头去尾去回车,一行字符串
*/
const RSA_PRIVATE_KEY = 'MIIEowIBAAKCAQEAuY/PUdR3XKuYCzYXxP2WNamBa03xNrzIlNljyi5vUsJl6rNgCC4tCxQOyl9bFd+yJu5hzoDRoB+674oLSKi6ErG6g0F3YjvfE7Ff5oK3P6GkovOsRZ6cGCp3eQua7lPSdtUnq8jUKgi03LJmcg2Nq9Vz9GRmlDAiE1RNU9PjlPBy5yKT/c4Lt83zpGnMU6ZKAqLeJyD+21Pd6Wj0K/uYtVMD0O4lpra2jl14J9u6I7Shcq9QwlCFURbtPBbIWQhcZ1FZNW08ophl1aC0b+J5FmGYD8IwbPDBipfDAXwVDteODJWweS1NB2oLr9zpwOucKqWgEpXdX8MHs/TdJGZyUQIDAQABAoIBAQCpwzSDg6KTyHS4RQun7+vdOi8psUvtrPbAnsWZsbOs/iZpeyNvOHeC/B2v7V8Seu2sikg2uUmOeZj3Ds7V8W8SLUEaVelXmLi0doDrDUmC0GojnlRL+RiLT0awGfrq8QrKJqY9pIgt0HtHX9MzosyqmQSVYMkr54E1N9nqyB4cIfNuP6OidzZ8QB2i0/ArfPs4Dwq10lNLGlx5aTg4WoAKb4XMKTDwim1WE1n1lyXh1o+xSczQ7pXrqfFioqLu8SjPPCi22gg0v24a5KhHnuWGwPpEGwwkB+LApkKiBsJ+1jVZHKWd9YgsPXrzK6PoK38BAvVnW1BPU0wQ6xlFYmsxAoGBAOSDdy5yvbnWTZbrPfA9ySgATNpOJvERCH7j/JYqC738SeVWLZ0sCgWL7EqZn1xdAM+s7IP44VlT1WnQhTGKul7NKTn7LYkA+1a4RA9qDWs7ygLQ8gUPseHDeRs/sTQfoBZT/FJ3nd78psVQ3LTfkCidWc9utw7wcjJzH610b6l9AoGBAM/hvua5LW1Bobnws3DMVHXMTkZmfyhn5mk4+ABs7uaKqxK0d0137F3MiKt6h9K7izHqIfRirExBKYe0W+HNGI5aTq+19OrMD3eNAxG8xJbkaiPkbiTaQkG10rIWqQEyvmCe2TAe+3mHUQQlFW5Y7MiZNF9XcYUXTAlUhz7x/yRlAoGABXpNShTADYtgksSS2IZyov3W2cjT0CWLYZdPf74ESAqbLt8w+rqKhvWCtYsXMdyc312S0dsOc9i5ne68sqJTs2ARo+0se0NFwx9pqkDtj2uAfS7LDmoA5puL9KZDNi+n48EhpExvwV+nE8XLdJ6DUyXqeDl8M+R5qFHwKXVIE/UCgYBVwe8bB3FyDQ1Gw8GC2whMwEfaSxZR+OrYpaPJqSa0/KeuQ7yjvMFJwMLw2s+FY9D8enYfd0VU/9y+Gu18rTtgHmkvm4S6CAypaQbHHnSLOxd+TxIRKekDaprM1QRLdj+LZHx8mYtsiyIk75dzukOUTX+JhW1TVlUL1E8m7HYw8QKBgHQgPDBrqTKH0YR5zYdYQdWroMhws83HuJvpPEcUNr76cDm5cxSsAY7mDBjXLnqIY2WmH2luvijJUbYqXNp+0Kco/ev8RC2yQelUjTokUkcQLkU6niQAGguxG+G1wlwj3fBpH+ZEIG8oyWe36Nnx/kbyLUGDygfDJ43f+Cfrkbpd';
/**
*请填写支付宝公钥,一行字符串
*/
const ALIPAY_RSA_PUBLIC_KEY = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArXEW1vnwcp54Y6JFuUnxtJTT0O/AVwgzHNFYo77RbPkU8pi2j7wL/13A0NNs6Ls+SEPHpWKhyvy3fSAWGVNNgCqeip6vP7aqL8sY9qDMN7l8Gz7ht2uqRW6K7p6fezcEtugDlZqE//Fblg1TIdGejAZ+iwEaH+fcyLe6pqxNi3rQh3BlfoXJMgcCyxx1k27r7tnctTiuiXGR3Yfr6wP6x+QB6WSLNQaUsEDiUTmlnxoybrFnh4SsSWxYwvvINguCBoWCjC0jtgcMAdxK85o3EfbE4M02oaBJqYMy1wlv4kKaMBCI5OuRdcmlRyjMsTD/LR3eWhRa5bDGo2p5JNQHqwIDDAQAB';
/**
* 支付宝服务器主动通知商户服务器里指定的页面
* @var string
*/
private $callback = "http://app.html5-app.com/alipay_notify.php";
/**
*生成APP支付订单信息
* @param string $orderId 商品订单ID
* @param string $subject 支付商品的标题
* @param string $body 支付商品描述
* @param float $pre_price 商品总支付金额
* @param int $expire 支付交易时间
* @return bool|string 返回支付宝签名后订单信息,否则返回false
*/
function unifiedorder($orderId, $subject,$body,$pre_price)
{
// return "fffff";
// exit();
try{
$aop = new \AopClient();
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = self::APPID;
$aop->rsaPrivateKey = self::RSA_PRIVATE_KEY;
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = self::ALIPAY_RSA_PUBLIC_KEY;
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$request = new \AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
/* $bizcontent = "{\"body\":\"{$body}\"," //支付商品描述
. "\"subject\":\"{$subject}\"," //支付商品的标题
. "\"out_trade_no\":\"{$orderId}\"," //商户网站唯一订单号
. "\"timeout_express\":\"{$expire}m\"," //该笔订单允许的最晚付款时间,逾期将关闭交易
. "\"total_amount\":\"{$pre_price}\"," //订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
. "}";*/
$bizcontent = json_encode(array(
'body'=>$body,
'subject' => $subject,//支付的标题,
'out_trade_no' => $orderId,//支付宝订单号必须是唯一的,不能在支付宝再次使用,必须重新生成,哪怕是同一个订单,不能重复。否则二次支付时候会失败,订单号可以在自己订单那里保持一致,但支付宝那里必须要唯一,具体处理自己操作!
'timeout_express' => '30m',//過期時間(分钟)
'total_amount' =>$pre_price,//金額最好能要保留小数点后两位数
'product_code' => 'QUICK_MSECURITY_PAY'
));
$request->setNotifyUrl($this->callback);
$request->setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
return $response;//就是orderString 可以直接给客户端请求,无需再做处理。
}catch (\Exception $e){
return false;
}
}
}
?>
然后调用此方法类
$alipay=new Alipay();
$getalipay=$alipay->unifiedorder("订单号","商品标题","商品描述","金额");
$arr["datas"]=$getalipay;
5.APP前端返回数据后,通过 plus.payment.request 调起支付宝支付窗口
假如: 返回的是支付宝支付信息
plus.payment.request(pays["alipay"],data["datas"],function(returns)
{
//支付成功
},function(e)
{
// plus.nativeUI.alert(JSON.stringify(e));
//用户取消支付或出错
});
加载更多