php实现微信扫码支付



我们要实现的就是这个功能.  接下来进行编码.


1.模拟用户点击提交订单时,应该会出现一个二维码。

$params = array('price' => 0.01, 'goodsid' => 55, 'userid' => 65);
$dat = TestOrder::queryAll($params);   // 入库操作,
$data = array(
    'price' => $dat['price'],
    'orderIdAlias' => $dat['orderIdAlias'],
    'goodsid' => $dat['goodsid']
);
 //微信支付的方法
$code_url = TestPayment::WeiXinNativePay($data);
if (!empty($code_url)) {
    return $this->render('placeanorder', [
        'codeurl' => $code_url,  // 微信二维码的url
    ]);
}
2.微信支付
         调微信的统一下单接口(微信文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1)

             组装数据

 $data = array(
            'appid' => self::$WeixinConfig['wxAppId'],
            'mch_id' => self::$WeixinConfig['wxMchId'],
            'nonce_str' => md5(microtime() . 'weixin' . rand(100, 9999)),
            'body' => self::$WeixinConfig['body'],
            'out_trade_no' => $params['orderIdAlias'],
            'fee_type' => 'CNY',
            'total_fee' => $params['price'] * 100,
            'spbill_create_ip' => $_SERVER["REMOTE_ADDR"], // 或者是你服务器的ip(最好是这个)
            'time_start' => date('YmdHis'),
            'time_expire' => date('YmdHis', strtotime('+2 hours')),
            'notify_url' => self::$WeixinConfig['notifyUrl'],
            'trade_type' => 'NATIVE',
            'product_id' => $params['goodsid'],
        );
        ksort($data);
        $str = http_build_query($data);
        $str = static::joinAPI_KEY2($str);
        $data['sign'] = strtoupper(md5(urldecode($str)));
        $xml = static::arrToXML($data);
        //请求统一下单订单接口,微信返回的xml
        $result = static::postXmlCurl($xml, self::$WeixinConfig['unifiedOrder']);
// 解析微信返回的xml
        $data = static::xmlToArr($result);
         if($data['RETURN_CODE'] == 'SUCCESS' && $data['RESULT_CODE'] == 'SUCCESS'){
                 return $data['CODE_URL'];  // 这个就是微信给返回的二维码地址
         } else {
             return '';
3.页面展示二维码
 
<img alt="模式二扫码支付" src="http://paysdk.weixin.qq.com/example/qrcode.php?data=<?php echo $codeurl;?>" style="width:150px;height:150px;"/>
4.回调

回调的作用是看是否真正的支付了。 如果真正的支付则要修改订单的状态

$result = file_get_contents('php://input');
// ll($result,'call_back.log');
// 将微信回调返回的xml转换成数组
$dat = TestPayment::xmlToArr($result);
ll(json_encode($dat), 'call_back.log');
if($dat['RETURN_CODE'] == 'SUCCESS' && $dat['RESULT_CODE'] == 'SUCCESS'){
        //更改订单状态,减库存等业务操作
       TestOrder::saveDb($dat);
        // 给微信返回xml格式,告诉微信我已经接收到回调了
    $xml = TestPayment::arrToXML(['return_code' => 'SUCCESS', 'return_msg' => 'OK'],true);
    echo $xml;
}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值