PHP

支付宝支付配置开发流程

Royal
2021-05-14 / 0 评论 / 1,403 阅读 / 正在检测是否收录...
  1. 进入支付宝商家中心 https://b.alipay.com/index2.htm
  2. 点击产品中心 找到网站支付,进行申请接入支付,如果已经开通请跳过
    koo4vbm6.png
  3. 进入支付宝商家开发者中心 https://openhome.alipay.com/platform/developerIndex.htm
  4. 点击创建应用
    koo4xgur.png
  5. 输入应用名称上传应用图标
    koo4ydr1.png
  6. 创建好应用后进去配置阶段,点击下图中的设置,进入接口加密设置,这里需要验证短信
    koo50do0.png
  7. 验证完短信进入加签管理界面
    koo50tru.png
  8. 下载 [支付宝密钥生成器]进行安装 https://opendocs.alipay.com/open/291/105971
  9. 打开[支付宝开放平台开发助手],勾选以下选项,点击生成
    koo57ev2.png
  10. 生成好的密钥如下图,注意不要关闭当前页面
    koo5862j.png
  11. 复制应用公钥填写在 7 图中的 [填写公钥字符]这一栏,点击保存设置
    koo59eck.png
  12. 配置接口访问白名单,验证短信完后如下图 , 勾选 配置全量接口
    koo5a9fj.png
  13. 填写自己服务器的ip地址进去保存
    koo5a1th.png
  14. 在支付宝开发者中当前得应用中查看支付宝公钥并复制
    koo5fxb9.png
  15. APPID绑定
    koo5bjw0.png
    koo5bpzp.png
  16. 如何查看APPID
    koo5ck2a.png
  17. 提交审核
    koo5d2n3.png
  18. 应用功能添加
    koo5dw49.png
    19.目前拿到了三个参数:分别是1.应用appid,2.蚂蚁金服key 图11中的应用私钥,3.蚂蚁金服公钥 图14中得到支付宝公钥
    20.下载sdk配置三个参数 即可完成支付宝调用。
    koo5lrxg.png
    21.支付下单代码如下

    /**
         * alipay.trade.wap.pay
         * @param $builder 业务参数,使用buildmodel中的对象生成。
         * @param $return_url 同步跳转地址,公网可访问
         * @param $notify_url 异步通知地址,公网可以访问
         * @return $response 支付宝返回的信息
         */
        function wapPay($builder,$return_url,$notify_url) {
        
            $biz_content=$builder->getBizContent();
            //打印业务参数
            $this->writeLog($biz_content);
        
            $request = new AlipayTradeWapPayRequest();
        
            $request->setNotifyUrl($notify_url);
            $request->setReturnUrl($return_url);
            $request->setBizContent ( $biz_content );
        
            // 首先调用支付api
            $response = $this->aopclientRequestExecute ($request,true);
            // $response = $response->alipay_trade_wap_pay_response;
            return $response;
        }
    function aopclientRequestExecute($request,$ispage=false) {
    
            $aop = new AopClient ();
            $aop->gatewayUrl = $this->gateway_url;
            $aop->appId = $this->appid;
            $aop->rsaPrivateKey =  $this->private_key;
            $aop->alipayrsaPublicKey = $this->alipay_public_key;
            $aop->apiVersion ="1.0";
            $aop->postCharset = $this->charset;
            $aop->format= $this->format;
            $aop->signType=$this->signtype;
            // 开启页面信息输出
            $aop->debugInfo=true;
            if($ispage)
            {
                $result = $aop->pageExecute($request,"post");
                echo $result;
            }
            else 
            {
                $result = $aop->Execute($request);
            }
            
            //打开后,将报文写入log文件
            $this->writeLog("response: ".var_export($result,true));
            return $result;
        }
    /*
            页面提交执行方法
            @param:跳转类接口的request; $httpmethod 提交方式。两个值可选:post、get
            @return:构建好的、签名后的最终跳转URL(GET)或String形式的form(POST)
            auther:笙默
        */
        public function pageExecute($request,$httpmethod = "POST") {
    
            $this->setupCharsets($request);
    
            if (strcasecmp($this->fileCharset, $this->postCharset)) {
    
                // writeLog("本地文件字符集编码与表单提交编码不一致,请务必设置成一样,属性名分别为postCharset!");
                throw new Exception("文件编码:[" . $this->fileCharset . "] 与表单提交编码:[" . $this->postCharset . "]两者不一致!");
            }
    
            $iv=null;
    
            if(!$this->checkEmpty($request->getApiVersion())){
                $iv=$request->getApiVersion();
            }else{
                $iv=$this->apiVersion;
            }
    
            //组装系统参数
            $sysParams["app_id"] = $this->appId;
            $sysParams["version"] = $iv;
            $sysParams["format"] = $this->format;
            $sysParams["sign_type"] = $this->signType;
            $sysParams["method"] = $request->getApiMethodName();
            $sysParams["timestamp"] = date("Y-m-d H:i:s");
            $sysParams["alipay_sdk"] = $this->alipaySdkVersion;
            $sysParams["terminal_type"] = $request->getTerminalType();
            $sysParams["terminal_info"] = $request->getTerminalInfo();
            $sysParams["prod_code"] = $request->getProdCode();
            $sysParams["notify_url"] = $request->getNotifyUrl();
            $sysParams["return_url"] = $request->getReturnUrl();
            $sysParams["charset"] = $this->postCharset;
    
            //获取业务参数
            $apiParams = $request->getApiParas();
    
            if (method_exists($request,"getNeedEncrypt") &&$request->getNeedEncrypt()){
    
                $sysParams["encrypt_type"] = $this->encryptType;
    
                if ($this->checkEmpty($apiParams['biz_content'])) {
    
                    throw new Exception(" api request Fail! The reason : encrypt request is not supperted!");
                }
    
                if ($this->checkEmpty($this->encryptKey) || $this->checkEmpty($this->encryptType)) {
    
                    throw new Exception(" encryptType and encryptKey must not null! ");
                }
    
                if ("AES" != $this->encryptType) {
    
                    throw new Exception("加密类型只支持AES");
                }
    
                // 执行加密
                $enCryptContent = encrypt($apiParams['biz_content'], $this->encryptKey);
                $apiParams['biz_content'] = $enCryptContent;
    
            }
    
            //print_r($apiParams);
            $totalParams = array_merge($apiParams, $sysParams);
            
            //待签名字符串
            $preSignStr = $this->getSignContent($totalParams);
    
            //签名
            $totalParams["sign"] = $this->generateSign($totalParams, $this->signType);
    
            if ("GET" == strtoupper($httpmethod)) {
                
                //value做urlencode
                $preString=$this->getSignContentUrlencode($totalParams);
                //拼接GET请求串
                $requestUrl = $this->gatewayUrl."?".$preString;
                
                return $requestUrl;
            } else {
                //拼接表单字符串
                return $this->buildRequestForm($totalParams);
            }
    
    
        }
3

评论

博主关闭了当前页面的评论