支付开发填坑记之支付宝 · 前端·禁地

JerryXia 发表于 , 阅读 (14)
根据订单信息生成待校验数据
APP支付的详细请求参数: 点击查看
APP-支付宝

生成请求给支付宝的加密字符串

1
$sign = $alipaySubmit->buildRequestParaForApp($para_token);

其中, buildRequestParaForApp 的实现为:

  1. 对待签名参数数组排序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
    * 对数组排序
    * @param $para 排序前的数组
    * return 排序后的数组
    */
    function argSort($para) {
    ksort($para);
    reset($para);
    return $para;
    }
  2. 生成签名结果(阿里推荐的是RSA2的签名方式,这里项目用的是RSA)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /**
    * RSA签名
    * @param $data 待签名数据
    * @param $private_key_path 商户私钥文件路径
    * return 签名结果
    */
    function rsaSign($data, $private_key_path) {
    $priKey = file_get_contents($private_key_path);
    $res = openssl_get_privatekey($priKey);
    openssl_sign($data, $sign, $res);
    openssl_free_key($res);
    //base64编码
    $sign = base64_encode($sign);
    return $sign;
    }

将待校验数据和加密字符串拼接,返回给APP。

1
2
3
4
5
$url = "";
foreach ($para_token as $key => $value) {
$url .= $key."=".urlencode($value)."&";
}
return $url."sign=".urlencode($sign);

APP将得到的数据请求支付宝客户端进行支付。
APP端将拼接好的字符串拿去请求支付宝客户端即可调起支付宝进行支付。拼接好的字符串大致如下图所示:
APP-支付宝-APP

网页版支付步骤为:

  1. 获取支付宝的配置信息。
  2. 生成商家订单信息。
  3. 根据订单信息构造业务详细参数
  4. 构造请求参数数组
  5. 模拟远程HTTP的POST请求方式构造并获取支付宝的处理结果。
  6. 解析远程模拟提交后返回的信息并获取request_token
  7. request_token再次构造成请求参数数组,并生成跳转页面。

网页版的支付宝支付相对于APP调起支付宝要复杂,因为网页支付时,需要多次请求支付宝服务器获取支付的必要参数。