微信native扫码支付

来源:互联网 发布:天猫优质男装品牌知乎 编辑:程序博客网 时间:2024/04/30 03:14

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

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 的回调地址


二.回调参数


<xml>
   <return_code><![CDATA[SUCCESS]]></return_code>
   <return_msg><![CDATA[OK]]></return_msg>
   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
   <mch_id><![CDATA[10000100]]></mch_id>
   <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
   <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
   <result_code><![CDATA[SUCCESS]]></result_code>
   <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
   <trade_type><![CDATA[JSAPI]]></trade_type>
</xml>



回调就不做多阐述了,区分好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_EXISTAPPID不存在参数中缺少APPID请检查APPID是否正确MCHID_NOT_EXISTMCHID不存在参数中缺少MCHID请检查MCHID是否正确APPID_MCHID_NOT_MATCHappid和mch_id不匹配appid和mch_id不匹配请确认appid和mch_id是否匹配LACK_PARAMS缺少参数缺少必要的请求参数请检查参数是否齐全OUT_TRADE_NO_USED商户订单号重复同一笔交易不能多次提交请核实商户订单号是否重复提交SIGNERROR签名错误参数签名结果不正确请检查签名参数和方法是否都符合签名算法要求XML_FORMAT_ERRORXML格式错误XML格式错误请检查XML参数格式是否正确REQUIRE_POST_METHOD请使用post方法未使用post传递参数 请检查请求参数是否通过post方法提交POST_DATA_EMPTYpost数据为空post数据不能为空请检查post数据是否为空NOT_UTF8编码格式错误未使用指定编码格式请使用NOT_UTF8编码格式


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

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


0 0
原创粉丝点击