百度智能小程序支付

之前写了百度小程序,时间长怕忘记,写篇文章记录一下。
(当前文章已更新建议阅读:百度智能小程序支付(新)

百度小程序支付文档: https://dianshang.baidu.com/platform/doclist/index.html#!/doc/nuomiplus_1_guide/settlement_v2.md
关于百度电商开放平台的申请,
在申请过程有时会遇到各种问题,可以参考这篇: https://smartprogram.baidu.com/forum/topic/show/63786
审核中有一点最重要的是:
(图一),填写好30分钟后是默认审核通过的,之后查看我的服务中dealld是否有值
(图二),如果有值则小程序就可以调起支付功能了,服务审核的状态可忽略。
如果没有值,就说明你设置中心填写的有问题,
就要重新检查,填写配置了。
冯奎博客

<?php

$requestParamsArr = array(
    'appKey'    => $appKey, // 百度电商平台开发者信息(APP KEY)
    'dealId'    => $dealId, // 百度电商平台开发者信息(dealId)
    'tpOrderId' => $order_sn // 订单编号
); //订单相关信息
$rsaSign = \NuomiRsaSign::genSignWithRsa($requestParamsArr, $private_key);  // 生成百度支付签名($private_key签名私钥)

$bdOrder = array(
    'dealId'        => $dealId, // 百度电商平台开发者信息(dealId)
    'totalAmount'   => $order_amount, // 订单金额,单位为人民币分
    'tpOrderId'     => $order_sn // 订单编号
    'bizInfo'       => '{}', // 订单详细信息(可像我这样填写空)
    'dealTitle'     => $goods_name, // 商品名称
    'appKey'        => $appKey, // 百度电商平台开发者信息(APP KEY)
    'rsaSign'       => $rsaSign, // 生成的签名
);

// 将$bdOrder转成json传给小程序端,就可以调起支付了

冯奎博客

生成签名文件NuomiRsaSign如下:

<?php
/**
 * API入参静态检查类
 * 可以对API的参数类型、长度、最大值等进行校验
 *
 **/
class NuomiRsaSign
{

    /**
     * @desc 私钥生成签名字符串
     * @param array $assocArr
     * @param $rsaPriKeyStr
     * @return bool|string
     * @throws Exception
     */
    public static function genSignWithRsa(array $assocArr, $rsaPriKeyStr)
    {
        $sign = '';
        if (empty($rsaPriKeyStr) || empty($assocArr)) {
            return $sign;
        }

        if (!function_exists('openssl_pkey_get_private') || !function_exists('openssl_sign')) {
            throw new Exception("openssl扩展不存在");
        }

        $priKey = openssl_pkey_get_private($rsaPriKeyStr);

        if (isset($assocArr['sign'])) {
            unset($assocArr['sign']);
        }

        ksort($assocArr); //按字母升序排序

        $parts = array();
        foreach ($assocArr as $k => $v) {
            if (is_string($v) && $v == "") {
                continue;
            }
            $parts[] = $k . '=' . $v;
        }
        $str = implode('&', $parts);
        openssl_sign($str, $sign, $priKey);
        openssl_free_key($priKey);

        return base64_encode($sign);
    }

    /**
     * @desc 公钥校验签名
     * @param array $assocArr
     * @param $rsaPubKeyStr
     * @return bool
     * @throws Exception
     */
    public static function checkSignWithRsa(array $assocArr, $rsaPubKeyStr)
    {
        if (!isset($assocArr['sign']) || empty($assocArr) || empty($rsaPubKeyStr)) {
            return false;
        }

        if (!function_exists('openssl_pkey_get_public') || !function_exists('openssl_verify')) {
            throw new Exception("openssl扩展不存在");
        }

        $sign = $assocArr['sign'];
        unset($assocArr['sign']);

        if (empty($assocArr)) {
            return false;
        }
        ksort($assocArr); //按字母升序排序
        $parts = array();
        foreach ($assocArr as $k => $v) {
            if (is_string($v) && $v == "") {
                continue;
            }
            $parts[] = $k . '=' . $v;
        }
        $str = implode('&', $parts);

        $sign = base64_decode($sign);
        $pubKey = openssl_pkey_get_public($rsaPubKeyStr);
        $result = (bool)openssl_verify($str, $sign, $pubKey);
        openssl_free_key($pubKey);

        return $result;
    }

}

冯奎博客
请先登录后发表评论
  • latest comments
  • 总共0条评论