微信转账到零钱V2

<?php
// +----------------------------------------------------------------------
// | ITUX.CN [ ITUX.CN软件定制开发 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2014~2023 https://itux.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 此软件并不是自由软件,未经许可不能去掉ITUX相关版权
// +----------------------------------------------------------------------
// | Author: 13103895694 <itholiday@126.com>
// +----------------------------------------------------------------------
//微信企业付款接口sdk
namespace addons\gaga\library\cqrs\libs;

class WxpayTransfer
{
    const API_URL = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
    private $_appid;
    private $_merchantid;
    private $_key;
    private $apiclient_cert;
    private $apiclient_key;
    private $debug = false;

    public function __construct($config)
    {
        $this->_appid = $config['app_id'];
        $this->_merchantid = $config['mch_id'];
        $this->_key = $config['api_key'];
        $this->apiclient_cert = ROOT_PATH . 'public' . DS . $config['apiclient_cert'];
        $this->apiclient_key = ROOT_PATH . 'public' . DS . $config['apiclient_key'];
    }

    function transfer($data, $check_name = true)
    {
        if ($this->debug) {
            return ['code' => 1, 'msg' => '测试转账'];
        }
        //支付信息
        $webdata = array(
            'mch_appid' => $this->_appid,//商户账号appid
            'mchid' => $this->_merchantid,//商户号
            'nonce_str' => $this->getNonceStr(),//随机字符串
            'partner_trade_no' => $data['order_sn'], //商户订单号,需要唯一
            'openid' => $data['openid'],//转账用户的openid
            'check_name' => 'NO_CHECK', //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK:
            'amount' => $data['money'] * 100, //付款金额单位为分
            'desc' => $data['desc'] ?? '业务退款',//企业付款描述信息
            'spbill_create_ip' => get_client_ip(),//获取IP
        );
        foreach ($webdata as $k => $v) {
            $tarr[] = $k . '=' . $v;
        }
        sort($tarr);
        $sign = implode($tarr, '&');
        $sign .= '&key=' . $this->_key;
        $webdata['sign'] = strtoupper(md5($sign));
        $wget = $this->ArrToXml($webdata);//数组转XML
        $res = $this->postData(self::API_URL, $wget);//发送数据
        write_log(['$webdata' => $webdata, '$res' => $res], 'tuikuan');
        if (!$res) {
            $this->log('转账失败:' . json_encode($webdata));
            $this->log('失败原因:不能连接到服务器');
            return array('code' => 0, 'msg' => "不能连接到服务器:" . json_encode($res, JSON_UNESCAPED_UNICODE));
        }
        $content = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
        if (strval($content->return_code) == 'FAIL') {
            $this->log('转账失败:' . json_encode($webdata));
            $this->log('失败原因:' . strval($content->return_msg));
            return array('code' => 0, 'msg' => strval($content->return_msg));
        }
        if (strval($content->result_code) == 'FAIL') {
            $this->log('转账失败:' . json_encode($webdata));
            $this->log('失败原因:' . strval($content->err_code_des));
            return array('code' => 0, 'msg' => strval($content->err_code_des));
        }
        $rdata = array(
            'mch_appid' => strval($content->mch_appid),
            'mchid' => strval($content->mchid),
            'device_info' => strval($content->device_info),
            'nonce_str' => strval($content->nonce_str),
            'result_code' => strval($content->result_code),
            'partner_trade_no' => strval($content->partner_trade_no),
            'payment_no' => strval($content->payment_no),
            'payment_time' => strval($content->payment_time),
        );
        $this->log('转账成功:' . json_encode($webdata));
        $this->log('成功数据:' . json_encode($rdata));
        return array('code' => 1, 'data' => $rdata);
    }

    //数组转XML
    protected function ArrToXml($arr)
    {
        if (!is_array($arr) || count($arr) == 0) return '';
        $xml = "<xml>";
        foreach ($arr as $key => $val) {
            if (is_numeric($val)) {
                $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
            } else {
                $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
            }
        }
        $xml .= "</xml>";
        return $xml;
    }


    //发送数据
    protected function postData($url, $postfields)
    {
        $ch = curl_init();
        $params[CURLOPT_URL] = $url;    //请求url地址
        $params[CURLOPT_HEADER] = false; //是否返回响应头信息
        $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
        $params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
        $params[CURLOPT_POST] = true;
        $params[CURLOPT_POSTFIELDS] = $postfields;
        $params[CURLOPT_SSL_VERIFYPEER] = false;
        $params[CURLOPT_SSL_VERIFYHOST] = false;
        //以下是证书相关代码
        $params[CURLOPT_SSLCERTTYPE] = 'PEM';
        $params[CURLOPT_SSLCERT] = $this->apiclient_cert;//绝对路径
        $params[CURLOPT_SSLKEYTYPE] = 'PEM';
        $params[CURLOPT_SSLKEY] = $this->apiclient_key;//绝对路径
        curl_setopt_array($ch, $params); //传入curl参数
        $content = curl_exec($ch); //执行
        curl_close($ch); //关闭连接
        return $content;
    }

    //随机字符串(不长于32位)
    protected function getNonceStr($length = 32)
    {
        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
        $str = "";
        for ($i = 0; $i < $length; $i++) {
            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $str;
    }

    private function log($content)
    {

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要开发java的微信转账零钱功能,需要进行以下几个步骤。 首先,我们需要在微信开放平台注册一个开发者账号,并创建一个应用。在创建应用时,需要选择相应的应用类型,如公众号、小程序或移动应用程序。 接下来,我们需要使用微信支付的API来实现转账功能。微信支付提供了一套完整的API,包括支付、退款、查询余额等功能。我们可以通过调用相应的API来实现从微信转账零钱的功能。 在进行转账之前,需要用户授权认证和绑定银行卡。用户需要在微信中进行授权认证,以便我们的应用可以获得用户的授权和支付权限。 一旦用户完成授权认证,我们就可以开始调用API来实现转账功能了。首先,我们需要通过API向微信支付申请支付的权限和生成支付订单。然后,用户可以选择转账的金额和目标账户,如零钱账户。 在用户确认转账后,我们使用API将转账请求发送给微信支付平台,并等待平台的响应。如果转账成功,平台将返回一个响应消息,并更新用户的零钱账户余额。 最后,我们可以根据需要进行适当的错误处理和结果展示,以便用户能够及时了解转账结果和可能的错误原因。 总结起来,开发java的微信转账零钱功能需要注册开发者账号、创建应用、使用微信支付API实现转账功能,并进行用户授权认证和绑定银行卡等步骤。此外,还需要处理错误和结果展示等细节,以提供良好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉阳软件yuyangdev_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值