微信native扫码支付

微信支付的方式有很多种,

1.JSAPI--公众号支付、

2.NATIVE--原生扫码支付、

3.APP--app支付,统一下单接口trade_type的传参可参考这里

4.MICROPAY--刷卡支付,刷卡支付有单独的支付接口,不调用统一下单接口


这里以 NATIVE  扫码支付为例进行介绍。


官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

步骤:

1.开通支付权限,获取app_id等必须参数

2.按官方文档组织参数,生成URL

3.CURL等访问URL,获取XML返回值,成功则获得code_url,二维码的URL参数

4.根据code_url生成二维码,展示在用户前台,用户微信扫描后完成支付

5.自己系统的回调验证,完成支付交易




一.配置参数

 /**
     * 组装包含支付信息的url(模式2)
     */
    public function get_payurl() {
        require_once BASE_PATH.'/api/payment/wxpay/lib/WxPay.Api.php';
        require_once BASE_PATH.'/api/payment/wxpay/WxPay.NativePay.php';
        require_once BASE_PATH.'/api/payment/wxpay/log.php';

        $logHandler= new CLogFileHandler(BASE_DATA_PATH.'/log/wxpay/'.date('Y-m-d').'.log');
        $Logwx = Logwx::Init($logHandler, 15);

        //统一下单
        $input = new WxPayUnifiedOrder();
        $input->SetBody($this->_order_info['pay_sn'].'订单');
//         $input->SetBody(C('site_name').'订单');
        $input->SetAttach($this->_order_info['order_type'] == 'vr_order' ? 'v' : 'r');
        $input->SetOut_trade_no($this->_order_info['pay_sn']);
        $input->SetTotal_fee($this->_order_info['api_pay_amount']*100);
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 3600));
        $input->SetGoods_tag('');
        $input->SetNotify_url(SHOP_SITE_URL.'/api/payment/wxpay/notify_url.php');
        $input->SetTrade_type("NATIVE");
        //$input->SetOpenid($openId);
        $input->SetProduct_id($this->_order_info['pay_sn']);
        $result = WxPayApi::unifiedOrder($input);
//         header("Content-type:text/html;charset=utf-8");
//         print_R($result);exit;
        Logwx::DEBUG("unifiedorder-:" . json_encode($result));
        return $result["code_url"];
    }

code_url是同步返回的结果,商户系统先调用该接口在微信支付服务后台生成预支付交易单


/**
 * 二维码显示(微信扫码支付) 
 */
public function qrcodeOp() {
    $data = base64_decode($code_url);
    require_once BASE_RESOURCE_PATH.'/phpqrcode/phpqrcode.php';
    QRcode::png($data);
}

phpqrcode等相关代码下载见三。

通过返回的结果生成二维码,用户扫描支付后,走参数填写 notify_url 的回调地址


二.回调参数



   
   
   
   
   
   
   
   
   



回调就不做多阐述了,区分好return_code与result_code,

前者是调用结果,后者是本次调用执行的结果,是有区别的。

根据不同的返回结果,对应操作自己的逻辑即可。


三.注意事项

1.【基本信息设置】
商户向微信提交企业以及银行账户资料,商户功能审核通过后,可以获得帐户基本信息,找到本例程的配置文件「WxPay.pub.config.php」,配置好如下信息:
        appId:微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看。
        Mchid:受理商ID,身份标识
        Key:商户支付密钥Key。审核通过后,在微信发送的邮件中查看。
        Appsecret:JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看。

2.【native支付链接设置】
native支付中,用户扫码后调微信会将productid和用户openid发送到商户设置的链接上,确保该链接与实际服务路径一致。本例程的响应服务为「./demo/native_call.php」

3.【JSAPI路径设置】
通过JSAPI发起支付的代码应该放置在商户设置的「支付授权目录」中。
并找到本例程的配置文件「WxPay.pub.config.php」,配置正确的路径。

4.【证书路径设置】
找到本例程的配置文件「WxPay.pub.config.php」,配置证书路径。

5.【异步通知url设置】
找到本例程的配置文件「WxPay.pub.config.php」,配置异步通知url。

6.【必须开启curl服务】
使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"即可。

7.【设置curl超时时间】
本例程通过curl使用HTTP POST方法,此处可修改其超时时间,默认为30秒。找到本例程的配置文件「WxPay.pub.config.php」,配置curl超时时间。

8. 除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。

9.  该接口 不需要证书

10.  微信的接口里,所有对金额的描述,都是以分为单位的


四.相关集成文档下载

封装文档:

二维码合成代码下载 : http://download.csdn.net/detail/ty_hf/9632186

支付源码文档下载 : http://download.csdn.net/detail/ty_hf/9632200



错误码

名称 描述 原因 解决方案
NOAUTH 商户无此接口权限 商户未开通此接口权限 请商户前往申请此接口权限
NOTENOUGH 余额不足 用户帐号余额不足 用户帐号余额不足,请用户充值或更换支付卡后再支付
ORDERPAID 商户订单已支付 商户订单已支付,无需重复操作 商户订单已支付,无需更多操作
ORDERCLOSED 订单已关闭 当前订单已关闭,无法支付 当前订单已关闭,请重新下单
SYSTEMERROR 系统错误 系统超时 系统异常,请用相同参数重新调用
APPID_NOT_EXIST APPID不存在 参数中缺少APPID 请检查APPID是否正确
MCHID_NOT_EXIST MCHID不存在 参数中缺少MCHID 请检查MCHID是否正确
APPID_MCHID_NOT_MATCH appid和mch_id不匹配 appid和mch_id不匹配 请确认appid和mch_id是否匹配
LACK_PARAMS 缺少参数 缺少必要的请求参数 请检查参数是否齐全
OUT_TRADE_NO_USED 商户订单号重复 同一笔交易不能多次提交 请核实商户订单号是否重复提交
SIGNERROR 签名错误 参数签名结果不正确 请检查签名参数和方法是否都符合签名算法要求
XML_FORMAT_ERROR XML格式错误 XML格式错误 请检查XML参数格式是否正确
REQUIRE_POST_METHOD 请使用post方法 未使用post传递参数  请检查请求参数是否通过post方法提交
POST_DATA_EMPTY post数据为空 post数据不能为空 请检查post数据是否为空
NOT_UTF8 编码格式错误 未使用指定编码格式 请使用NOT_UTF8编码格式


都很简单,就是调接口而已,注意的就是安全性的一些问题

比如说,对返回的code_url二维码信息,在传递的过程中注意加解密等


你可能感兴趣的:(Others,微信/支付宝)