微信支付-付款到零钱开发流程

本文详细介绍了如何进行微信支付接口的对接,包括配置微信商户平台、调用接口请求说明以及PHP代码实现。提供了完整的类服务代码示例,涵盖了支付方法、获取支付公参、数据签名等关键步骤,适用于企业向用户付款的场景。

微信官方说明地址:

【微信支付】付款开发者文档微信支付付款,提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款icon-default.png?t=L9C2https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1

第一步:微信商户平台配置

第二步:接口对接

接口调用请求说明:

第三步:接口开发(这里使用的是PHP)

当时开发时,就写了一个类作为服务。代码可以直接使用。
说明:里面的配置项需要换成你们自己的。

class WeChatPayService
{
    /**
     * 代码版本号
     * @var string
     */
    public static $version = "1.0.0";

    private $payReqUrl = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';

    /**
     * KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置), 请妥善保管, 避免密钥泄露
     * 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
     *
     * APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置), 请妥善保管, 避免密钥泄露
     * 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
     *
     * mchAppId:申请商户号的appid或商户号绑定的appid
     *
     * mchId:微信支付分配的商户号
     *
     * $sslCertPath:cert 与 key 分别属于两个.pem文件(证书文件请放入服务器的非web目录下)
     * @var string
     */
    private $key         = '';
    private $appId       = '';
    private $appSecret   = '';
    private $mchAppId    = '';
    private $mchId       = '';
    private $sslCertPath = "";
    private $sslKeyPath  = "";

    /**
     * 构造函数
     */
    public function __construct( )
    {

    }

    /**
     * @Description //TODO 支付方法
     * @param array $requestParams  [请求接口需要的参数]
     * @return array    $formatRes  [业务结果]
     **/
   
### 三级标题:L2-005 集合相似度 解题思路与算法分析 在解决集合相似度问题时,目标是计算两个集合之间的相似度指标,定义为 $N_c / N_t \times 100\%$,其中 $N_c$ 是两个集合中都存在的不相等整数的个数,而 $N_t$ 是两个集合中总共包含的不同整数的个数[^1]。 #### 数据结构选择 为了高效地处理集合操作,可以使用哈希表或位图来表示每个集合。哈希表适合存储任意范围的整数,并支持快速的查找和插入操作。对于每个输入集合,可以将其存储为一个 `std::unordered_set<int>` 或者类似的结构,以确保元素唯一性并支持高效的交集和并集运算。 #### 计算步骤 1. **读取输入数据**:首先读取所有集合的数据,并将每个集合存储在一个独立的哈希集合中。 2. **统计公共元素数量(Nc)**:对于给定的两个集合,可以通过遍历其中一个集合中的元素,并检查其是否存在于另一个集合中,从而统计出交集中元素的数量。 3. **统计总不同元素数量(Nt)**:通过合并两个集合后去重的方式,可以得到总的不重复元素数量。 4. **计算相似度**:根据公式 $N_c / N_t \times 100\%$,计算出两个集合之间的相似度,并输出结果。 #### 时间复杂度分析 假设每个集合平均有 $m$ 个元素,则对于每对集合的比较: - 计算交集的时间复杂度约为 $O(m)$; - 计算并集的时间复杂度约为 $O(m)$; 因此,对于 $k$ 对查询,总时间复杂度为 $O(k \cdot m)$,这在大多数情况下是可以接受的。 #### 示例代码 以下是一个简单的 C++ 实现示例: ```cpp #include <iostream> #include <vector> #include <unordered_set> using namespace std; // 函数用于计算两个集合相似度 double computeSimilarity(const unordered_set<int>& setA, const unordered_set<int>& setB) { int commonCount = 0; // 统计公共元素数量 for (int num : setA) { if (setB.find(num) != setB.end()) { ++commonCount; } } // 计算总不同元素数量 unordered_set<int> unionSet(setA); for (int num : setB) { unionSet.insert(num); } return static_cast<double>(commonCount) / unionSet.size() * 100.0; } int main() { int n; cin >> n; // 输入集合的数量 vector<unordered_set<int>> sets(n); // 读取每个集合的内容 for (int i = 0; i < n; ++i) { int m; cin >> m; // 输入该集合的元素个数 for (int j = 0; j < m; ++j) { int num; cin >> num; sets[i].insert(num); } } int k; cin >> k; // 输入需要查询的集合对数 // 处理每一对查询 for (int i = 0; i < k; ++i) { int idxA, idxB; cin >> idxA >> idxB; // 输入要比较的两个集合索引 --idxA; --idxB; // 转换为从0开始的索引 double similarity = computeSimilarity(sets[idxA], sets[idxB]); cout.precision(2); cout << fixed << similarity << "%" << endl; } return 0; } ``` 这段代码展示了如何使用 `unordered_set` 来处理集合的操作,并且提供了清晰的逻辑来计算相似度。 #### 空间优化建议 如果内存有限,可以考虑使用位图(bit map)来代替哈希集合,但这要求所有的整数值都在一个较小的范围内,以便能够用位图有效地表示这些值。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值