微信js支付 php

        /*

* 自己封装的微信js支付

        *ci框架

*/
public function wxPay($openid,$price,$order,$body)
{
    $opts = [
    'appid' => $this->config->item('appid'),//appid
    'mch_id' => $this->config->item('mch_id'),//商户号
    'nonce_str' => md5(time() . mt_rand(1000, 9999)),
    'body' => $body,
    'out_trade_no' => $order,
    'total_fee' => $price*100,
    'spbill_create_ip' => $this->input->ip_address(),
    'notify_url' => base_url() . 'Weixinpay/wxpay_back',   //支付成功通知地址
    'trade_type' => 'JSAPI',
    'openid' => $openid  //先微信授权获取用户openid
    ];
    $opts['sign'] = $this->getSign($opts);
    $xml = $this->array2xml($opts);
    $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
    $ch = curl_init();
    //设置超时
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//严格校验
    //设置header
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    //要求结果为字符串且输出到屏幕上
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    //post提交方式
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
    //运行curl
    $data = curl_exec($ch);
    curl_close($ch);
    $res = $this->xml2array($data);
    if ($res['return_code'] == 'SUCCESS' && $res['return_msg'] == 'OK') {
        $config = [
        'appId' => $this->config->item('appid'),//appid
        'timeStamp' => (string)time(),
        'nonceStr' => uniqid(),
        'package' => 'prepay_id=' . $res['prepay_id'],
        'signType' => 'MD5'
            ];

        $config['paySign'] = $this->getSign($config);
    }else{
            $config['errmsg'] = $res['return_msg'];
            $config['errcode'] = $res['return_code'];
        }
        return $config;

}

        //数组转xml

        private function array2xml($array)
{
    $xml = "<xml>" . PHP_EOL;
    foreach ($array as $k => $v) {
        if ($v && trim($v) != '')
            $xml .= "<$k><![CDATA[$v]]></$k>" . PHP_EOL;
    }
    $xml .= "</xml>";
    return $xml;

}

        //xml转数组

        private function xml2array($xml)
{
    $array = array();
    $tmp = null;
    try {
        $tmp = (array)simplexml_load_string($xml);
    } catch (Exception $e) {
    }
    if ($tmp && is_array($tmp)) {
        foreach ($tmp as $k => $v) {
            $array[$k] = (string)$v;
        }
    }
    return $array;

}

        //签名

        function getSign($data)
{
    ksort($data);
    $string1 = "";
    foreach ($data as $k => $v) {
        if ($v && trim($v) != '') {
            $string1 .= "$k=$v&";
        }
    }
    $stringSignTemp = $string1 . "key=".$this->config->item('key');//公众号密钥
    $sign = strtoupper(md5($stringSignTemp));
    return $sign;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值