之前写了百度小程序,时间长怕忘记,写篇文章记录一下。
(当前文章已更新建议阅读:百度智能小程序支付(新))
百度小程序支付文档:
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;
}
}
本文为冯奎原创文章,转载无需和我联系,但请注明来自冯奎博客fengkui.net
最新评论