首页 > 开发 > PHP > 正文

php 服务端集成支付宝APP支付实例

2024-05-04 22:43:51
字体:
来源:转载
供稿:网友

支付宝支付分为了很多种场景,这里只讲述支付宝APP支付功能集成,期间遇到了特别大的坑,因此我简单描述下集成过程,并概述遇到的问题及解决方案

由于公司业务简单,只支持支付宝支付,而无需关心退款,查询等等额外功能,因此该篇内容仅仅讲述支付宝支付接口时服务端如何准备APP拉取支付订单的信息,大概流程如下

一、创建应用及配置

首先,需要到蚂蚁金服开发平台(open.alipay.com)注册应用,并获取应用ID,并配置应用,这里在配置时主要是签约,生成应用的RSA2公私钥,同时获取到支付宝提供的支付公钥等,这部分官网后台都有提示,比较简单

二、下载对应SDK

这里我是在PHP后台集成服务,因此下载的是PHP SDK,地址:https://docs.open.alipay.com/54/103419/

三、准备一个可以访问的真实域名

四、案例

当以上三部完成之后,此时就可以进入配置我们自己的业务代码了

4.1、组织APP支付时的支付订单信息

<?phprequire_once (__DIR__.'/alipay-sdk-PHP-20171023143822/AopSdk.php');class Alipay{ /** * 应用ID */ const APPID = '你的应用ID'; /** *请填写开发者私钥去头去尾去回车,一行字符串 */ const RSA_PRIVATE_KEY = '应用对应开发者私钥'; /** *请填写支付宝公钥,一行字符串 */ const ALIPAY_RSA_PUBLIC_KEY = '支付宝提供的公钥'; /** * 支付宝服务器主动通知商户服务器里指定的页面 * @var string */ private $callback = "http://www.test.com/notify/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 */ public function unifiedorder($orderId, $subject,$body,$pre_price,$expire){ 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/""  . "}";  $request->setNotifyUrl($this->callback);  $request->setBizContent($bizcontent);  //这里和普通的接口调用不同,使用的是sdkExecute  $response = $aop->sdkExecute($request);  //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题  return htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。 }catch (/Exception $e){  return false; } }}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表