支付宝新版sdk(php) Alipay\EasySDK\Kernel\Factory 对接问题

1.需要授权 实名信息校验的能力的话,沙盒环境不支持;直接对接线上

2.关于使用pubKey 还是.cert 方式 进行对接;

支付宝开放平台文档 说明: 有一个商户支付宝账户支付到 另一支付宝账户时的资金转出接口场景时候,需要强制使用cert 方式;

场景接口: 老版接口名 为alipay.fund.trans.toaccount.transfer 单笔转账到支付宝账户接口是基于支付宝的资金处理能力,为了满足支付宝商家向其他支付宝账户转账的需求,针对有部分开发能力的商家,提供通过API接口完成支付宝账户间的转账的功能。 该接口适用行业较广,比如商家间的货款结算,商家给个人用户发放佣金等。(目前已对该接口能力做了升级,后续建议调用新接口alipay.fund.trans.uni.transfer)

3.关于新版sdk 调用问题:如果给出的Factory::member(), ::payment()等不包含所要使用的接口的能力的话, 可以调用 Factory::util()->generic()

4.Factory::util()->generic() 返回值问题,正常情况下 新版alipaysdk 返回值为 Alipay\EasySDK\Util\Generic\ModelsAlipayOpenApiGenericResponse 对象;

其httpBody 包含四种情形:

//注意新版sdk返回的http_body,根node 返回情形包括:

//1)根node 为func_name 包含 code=10000 msg sub_msg 业务请求成功

//2)根node 为func_name 包含 code 但是 code!=10000 msg sub_msg 业务请求失败

//3)根node 为func_name 不包含 code msg sub_msg 业务请求成功,此时 AlipayOpenApiGenericResponse $alipayRespObj->code = null

//4)根node 为error_response 包含 code 但是 code!=10000 msg sub_msg 业务请求失败

#判断响应正常的条件
(!empty($alipayRespObj->code) && $alipayRespObj->code == self::REQUEST_SUCCESS_CODE)//根node 为func_name
or is_null($alipayRespObj->code) //根node 为error_response

5. 判断响应成功后,提取httpBody 内容用到的方法,以下两种任选其一:

use Alipay\EasySDK\Kernel\Util\SignContentExtractor;
use Alipay\EasySDK\Util\Generic\Models\AlipayOpenApiGenericResponse;

const FUNC_NAME = null; //比如 alipay.system.oauth.token
const REQUEST_SUCCESS_CODE = '10000';
const ERROR_RESPONSE_NODE_NAME = 'error_response';

 /**
  * 原始请求时返回的 json str 最外层的node name,比如 alipay.system.oauth.token 接口响应的 为 alipay_system_oauth_token_response
  * @var string
  */
    public $respHttpBodyRetrieveKey = null;

/**
 * 响应成功时候调用
 * 解析使用execute方式时的响应(自行按json方式解析)
 * @param AlipayOpenApiGenericResponse $response  主响应体
 * @return mixed
 */
public function decodeBodyByJson(AlipayOpenApiGenericResponse $response)
{
    //decode
    $bodyJson = json_decode($response->httpBody, false);

    return $bodyJson->{$this->respHttpBodyRetrieveKey}??$bodyJson->error_response;
}

/**
 * 响应成功时候调用
 * 解析使用execute方式时的响应 (提取自Alipay新版sdk中内置字符串截取的方式)
 *
 * @param $respMap  AlipayOpenApiGenericResponse
 * @return string  a json string
 * @throws \Exception
 */
public function decodeBodyByAlipaySdk(AlipayOpenApiGenericResponse $resp)
{
    return (new SignContentExtractor())->getSignSourceData(
        $resp->httpBody,
        self::FUNC_NAME
    );
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章