微信商户 API 发红包!

代码备份录——微信发红包

代码

$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";

$mch_billno = strtoupper(Date("YmdHis").str_random(10).rand(1111,9999)); // 商户订单号
$nonce_str = substr(md5(time().rand(1,9999)),1,32);
$openid = "";//
$amount = 100; // 单位为分,红包金额
$data = [
    "nonce_str"=>$nonce_str,
    "mch_billno"=>$mch_billno,
    "mch_id"=>___wx_mch_id,
    "wxappid"=>___wx_appid,
    "send_name"=>___wap_name,
    "re_openid"=>$openid,
    "total_amount"=>$amount,
    "total_num"=>1,
    "wishing"=>"奖励红包",
    "client_ip"=>$request->getClientIp(),
    "act_name"=>"完成奖励",
    "remark"=>"感谢您的支持!",
];
ksort($data);
$sign = strtoupper(md5(ToUrlParams($data)."&key=".___wx_pay_key));
$data = array_merge($data,array("sign"=>$sign));
$data = ToXml($data);
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,"{$url}");
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_POST,true);
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($curl,CURLOPT_SSLCERT,app_path('Cert/apiclient_cert.pem'));
curl_setopt($curl,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($curl,CURLOPT_SSLKEY,app_path('Cert/apiclient_key.pem'));
$string = curl_exec($curl);
curl_close($curl);
$strpostData = simplexml_load_string($string);
$stringData = [];
Log::info($strpostData);
foreach ($strpostData->children() as $child){
    $stringData = array_merge($stringData,array($child->getName()=>(string)$child));
}
Log::info($stringData);
if($stringData["return_code"] == "SUCCESS" && $stringData["result_code"] == "SUCCESS") {
    // 发红包成功...
}
return;

辅助函数需要提前加载,加载方式
创建文件 app/Common/BladeGeneral.php,添加下方2个函数
并在index.php 内引入

index.php

require __DIR__.'/../vendor/autoload.php';
// 在这添加即可,其他代码不动
require __DIR__ . '/../app/Common/BladeGeneral.php';  // 引入

辅助函数

/**
 * 格式化参数格式化成url参数
 */
function ToXml($data){
    if(is_array($data) && count($data) > 0) {
        $xml = "<xml>";
        foreach ($data as $key=>$val) {
            $xml.="<".$key.">".$val."</".$key.">";
        }
        $xml.="</xml>";
        return $xml;
    }
    return "";
}

function ToUrlParams($data){
    $buff = "";
    foreach ($data as $k => $v)
    {
        if($k != "sign" && $v != "" && !is_array($v)){
            $buff .= $k . "=" . $v . "&";
        }
    }
    $buff = trim($buff, "&");
    return $buff;
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
朝着梦,踏平坎坷
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!