PHP实现公众号发送红包和企业付款(无需支付SDK)

浏览:3958 发布日期:2017/08/31 分类:技术分享 关键字: 微信红包 企业付款
自己写了一个类,用来公众号发红包和企业付款,用起来很方便,很简单,源码请看附件:/**
 * 公众号发红包
 * @param string $openid     用户openID
 * @param string $money     金额
 * @param string $trade_no  订单编号
 * @param string $act_name  活动名称
 * @return multitype         支付结果
 */
public function sendredpack($openid,$money,$trade_no,$act_name){
    $config = $this->config;
    
    $data = array(
        'nonce_str'         => self::getNonceStr(),
        'mch_billno'         => $trade_no,
        'mch_id'             => $config['mch_id'],
        'wxappid'             => $config['wxappid'],
        'send_name'         => '江南极客',
        're_openid'            => $openid,
        'total_amount'        => $money * 100, //付款金额单位为分
        'total_num'            => 1,
        'wishing'              => '祝您天天开心!',
        'client_ip'         => self::getip(),
        'act_name'             => $act_name,
        'remark'             => 'From 江南极客'
    );
    
    $data['sign'] = self::makeSign($data);
    
    //构造XML数据
    $xmldata = self::array2xml($data);
    
    $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
    //发送post请求
    $res = self::curl_post_ssl($url, $xmldata);
    
    if(!$res){
        return array('status'=>0, 'msg'=>"Can't connect the server" );
    }
    
    // 这句file_put_contents是用来查看服务器返回的结果 测试完可以删除了
    //file_put_contents('./log.txt',$res,FILE_APPEND);
    
    $content = self::xml2array($res);
    if(strval($content['return_code']) == 'FAIL'){
        return array('status'=>0, 'msg'=>strval($content['return_msg']));
    }
    if(strval($content['result_code']) == 'FAIL'){
        return array('status'=>0, 'msg'=>strval($content['err_code']).':'.strval($content['err_code_des']));
    }
    return $content;
}
    
/**
 * 公众号企业支付
 * @param string $openid     用户openID
 * @param string $money     金额
 * @param string $trade_no  订单编号
 * @param string $desc      付款操作说明信息(比如:提现)
 * @return string     支付结果
 */
public function mchpay($openid,$money,$trade_no,$desc){
    $config = $this->config;
    $data = array(
        'mch_appid' => $config['wxappid'],
        'mchid'     => $config['mch_id'],
        'nonce_str' => self::getNonceStr(),
        'partner_trade_no' => $trade_no, 
        'openid'    => $openid,
        'check_name'=> 'NO_CHECK',             //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK:
        'amount'    => $money * 100,         //付款金额单位为分
        'desc'      => $desc,
        'spbill_create_ip' => self::getip()
    );
    
    //生成签名
    $data['sign'] = self::makeSign($data);
    
    //return $config;
    
    //构造XML数据
    $xmldata = self::array2xml($data);
    $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
    //发送post请求
    $res = self::curl_post_ssl($url, $xmldata);
    if(!$res){
        return array('status'=>0, 'msg'=>"Can't connect the server" );
    }
    // 这句file_put_contents是用来查看服务器返回的结果 测试完可以删除了
    //file_put_contents('./log1.txt',$res,FILE_APPEND);
    
    //付款结果分析
    $content = self::xml2array($res);
    if(strval($content['return_code']) == 'FAIL'){
        return array('status'=>0, 'msg'=>strval($content['return_msg']));
    }
    if(strval($content['result_code']) == 'FAIL'){
        return array('status'=>0, 'msg'=>strval($content['err_code']).':'.strval($content['err_code_des']));
    }
   
    return $content;
}
调用方法超级简单,源码末尾有样例:$config = array(
    'wxappid'        => 'wx123456789876',
    'mch_id'         => '123456789',
    'pay_apikey'     => '123456789876123456789876123456789876',
    'api_cert'        => getcwd().'/cert/apiclient_cert.pem',    
    'api_key'        => getcwd().'/cert/apiclient_key.pem'
);

$redpack = new WxRedpack($config);                                //初始化类(同时传递参数)
$redpack->sendredpack($openid,$money,$trade_no,$act_name);        //发红包
$redpack->mchpay($openid,$money,$trade_no,$act_name);            //企业付款

附件 wxmerpay.class.zip ( 3.9 KB 下载:512 次 )

最佳答案
评论( 相关
后面还有条评论,点击查看>>