精华内容
下载资源
问答
  • 微信JSAPI支付DEMO PHP版,通俗易懂 包含支付配置文件 发起支付类文件 异步通知类文件 发起支付的HTMl文件等
  • 微信native支付, 微信JSAPI支付, 微信退款, 微信提现, 微信付款查询, 所有方法都已经封装实现, main方法可直接调用体验, maven项目
  • 支付demo,集成了支付宝网站支付微信jsapi支付,银联网页支付
  • 支付demo,集成了支付宝网站支付微信jsapi支付,银联网页支付
  • 微信JSAPI支付,扫码支付,退款查询接口demo,配置及可直接使用
  • 微信JSAPI支付完整Demo第二版(新增关闭订单、查询订单、查询退款、下载对账单、申请退款)售后服务,里面包括个人QQ,邮箱。有问题随时咨询!分高但是它值那么多分。
  • 最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞...微信支付SDK,下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_13.登录微信支付平台https://pay.w...

    最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们的探索,我看了他们的博文,让我少走了很多弯路。前期准备:1.微信认证服务号,并且开通了微信支付2.微信支付SDK,下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_13.登录微信支付平台https://pay.weixin.qq.com/index.php/account/api_cert下载支付证书方法步骤:1.demo文件处理(1)将官方的demo下载下来,文件名为WxpayAPI_php_v3,把这文件重命名为wxpay,为了后边书写目录方便;

    (2)打开lib文件夹下的WxPay.Api.PHP文件,在537行有一段curl网络请求配置代码:

    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);

    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验

    替换成:

    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);

    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验

    为了禁止 cURL 验证对等证书(peer's certificate)。

    (3)打开lib文件夹下的WxPay.Config.php文件,第25行开始,根据自己的账号完成基本信息设置;

    constAPPID ='公众账号APPID';

    constMCHID ='商户号';

    constKEY ='商户支付密钥';

    constAPPSECRET ='公众帐号secert';

    (4)打开lib文件夹下的WxPay.Notify.php文件,第79行的代码:

    if($needSign== true &&

    $this->GetReturn_code($return_code) =="SUCCESS")

    {

    $this->SetSign();

    }

    改成:

    if($needSign== true &&

    $this->GetReturn_code() =="SUCCESS")

    {

    $this->SetSign();

    }

    (5)打开cert证书目录,将里边的两个证书换成自己的支付证书。

    2.公众号后台设置

    (1)配置网页授权域名,我的域名是(xy.chuyin.ren);

    74be03550703bc6b284ac7eddfd30bca.png

    (1)配置支付授权目录,域名是(xy.chuyin.ren),我将demo放到此域名指向的目录的weixinopen/文件夹下,demo中jsapi.php文件位于example/目录下,所以支付授权目录为:xy.chuyin.ren/weixinopen/wxpay/example/

    ac893dec44d61aa52d8131b5babfa93a.png

    3.支付流程打开example目录下的jsapi.php文件,支付发起和处理,都是在这里完成。(1)获取用户openid

    之前配置好了自己的APPID和APPSecert,所以这里不用处理。

    //①、获取用户openid

    $tools=newJsApiPay();

    $openId=$tools->GetOpenid();

    这里首先初始化的一个JsApiPay()类得到一个对象,文件对应example/目录下的WxPay.JsApiPay.php,调用GetOpenid()方法,会自动获取自己的openID。

    (2)统一下单

    //②、统一下单

    $input=newWxPayUnifiedOrder();

    $input->SetBody("test");

    $input->SetAttach("test");

    $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));

    $input->SetTotal_fee("1");

    $input->SetTime_start(date("YmdHis"));

    $input->SetTime_expire(date("YmdHis", time() + 600));

    $input->SetGoods_tag("test");

    $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");

    $input->SetTrade_type("JSAPI");

    $input->SetOpenid($openId);

    $order= WxPayApi::unifiedOrder($input);

    echo'统一下单支付单信息
    ';

    printf_info($order);

    $jsApiParameters=$tools->GetJsApiParameters($order);

    对应WxPay.Api.php的第24行的unifiedOrder()方法,配置订单信息和支付回调函数,这里需要修改几个参数:

    A. 商品名称:

    $input->SetBody("test");

    B. 订单号

    $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));

    C. 支付金额

    $input->SetTotal_fee("1");

    D. 支付验证链接

    设置为你的notify.php文件所在的位置,所以我这里设置为:http://xy.chuyin.ren/weixinopen/wxpay/example/notify.php

    也可以写其他地址,当然要在支付授权域名之下,支付成功之后就会自动回调到该链接指定的方法里边,可以在里边进行判断和数据库操作.

    $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");

    E. 附加参数

    $input->SetAttach("test");

    附加参数,可填可不填,填写的话,里边字符串最好不要出现空格。这时候,点击支付应该就可以成功支付了。

    (3)发起支付

    //调用微信JS api 支付

    functionjsApiCall()

    {

    WeixinJSBridge.invoke(

    'getBrandWCPayRequest',

    <?php  echo $jsApiParameters; ?>,

    function(res){

    WeixinJSBridge.log(res.err_msg);

    alert(res.err_code+res.err_desc+res.err_msg);

    }

    );

    }

    functioncallpay()

    {

    if(typeofWeixinJSBridge =="undefined"){

    if( document.addEventListener ){

    document.addEventListener('WeixinJSBridgeReady', jsApiCall,false);

    }elseif(document.attachEvent){

    document.attachEvent('WeixinJSBridgeReady', jsApiCall);

    document.attachEvent('onWeixinJSBridgeReady', jsApiCall);

    }

    }else{

    jsApiCall();

    }

    }

    点击立即支付按钮调用的就是 callpay() 函数,他有会调用jsApiCall() 函数打开支付程序。

    6c276c47e095a6217cd10fb92f3a6c1d.png

    jsApiCall() 函数会监听每一步动作:

    63b94f9a9300340083d0a2ef67f18101.png

    res.err_msg 为get_brand_wcpay_request:cancel 表明前端判断的取消支付,es.err_msg 为get_brand_wcpay_request:ok 表明前端判断的支付成功,我们可以根据这个将支付跳转到成功页面。

    (4)支持成功回调

    通过前端jsApiCall()函数可以监听支付结果,但是这个并不可信。确认是否支付成功还是应当通过notify.php 处理业务逻辑。前边配置好了支付验证链接SetNotify_url(),支付完成后,微信服务器会根据链接自动请求你的notify.php文件,打开这个文件,其实这个文件最主要的代码就两行:

    $notify=newPayNotifyCallBack();

    $notify->Handle(false);

    由此跟踪到WxPay.Notify.php类文件的Handle()函数:

    /**

    *

    * 回调入口

    * @param bool $needSign  是否需要签名输出

    */

    final publicfunctionHandle($needSign= true)

    {

    $msg="OK";

    //当返回false的时候,表示notify中调用NotifyCallBack回调失败获取签名校验失败,此时直接回复失败

    $result= WxpayApi::notify(array($this,'NotifyCallBack'),$msg);

    if($result== false){

    $this->SetReturn_code("FAIL");

    $this->SetReturn_msg($msg);

    $this->ReplyNotify(false);

    return;

    } else{

    //该分支在成功回调到NotifyCallBack方法,处理完成之后流程

    $this->SetReturn_code("SUCCESS");

    $this->SetReturn_msg("OK");

    }

    $this->ReplyNotify($needSign);

    }

    主要代码:

    $result= WxpayApi::notify(array($this,'NotifyCallBack'),$msg);

    然后来到WxPay.Api.php文件的第411行,notify()函数:

    /**

    *

    * 支付结果通用通知

    * @param function $callback

    * 直接回调函数使用方法: notify(you_function);

    * 回调类成员函数方法:notify(array($this, you_function));

    * $callback  原型为:function function_name($data){}

    */

    publicstaticfunctionnotify($callback, &$msg)

    {

    //获取通知的数据

    $xml=$GLOBALS['HTTP_RAW_POST_DATA'];

    //file_put_contents('log.txt',$xml,FILE_APPEND);

    //如果返回成功则验证签名

    try {

    $result= WxPayResults::Init($xml);

    } catch (WxPayException $e){

    $msg=$e->errorMessage();

    returnfalse;

    }

    returncall_user_func($callback,$result);

    }

    这里面的$xml=$GLOBALS['HTTP_RAW_POST_DATA'],就是支付成功后用户返回给你的一个结果,他是一个xml格式的字符串。

    8d3e72a9b77e93e08169205bae646d7c.png

    我们可以将这里返回的xml数据记录下来,然后打开看看$out_trade_no就是在支付之前我自己设置的订单号码,$attach就是设置的附加参数。

    得到了这个订单号,然后我就直接在下面写支付成功后的逻辑了,比如改变数据库中的数据等等。

    这样 微信支付的 JsApi支付就大致分析完成了。

    3641581984f027112730b1f163cab19b.png

    展开全文
  • 最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞...微信支付SDK,下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_13.登录微信支付平台https://pay.w...

    最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们的探索,我看了他们的博文,让我少走了很多弯路。

    前期准备:

    1.微信认证服务号,并且开通了微信支付

    2.微信支付SDK,下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

    3.登录微信支付平台https://pay.weixin.qq.com/index.php/account/api_cert下载支付证书

    方法步骤:

    1.demo文件处理

    (1)将官方的demo下载下来,文件名为WxpayAPI_php_v3,把这文件重命名为wxpay,为了后边书写目录方便;

    (2)打开lib文件夹下的WxPay.Api.php文件,在537行有一段curl网络请求配置代码:curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);

    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验

    替换成:curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);

    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验

    为了禁止 cURL 验证对等证书(peer's certificate)。

    (3)打开lib文件夹下的WxPay.Config.php文件,第25行开始,根据自己的账号完成基本信息设置;const APPID = '公众账号APPID';

    const MCHID = '商户号';

    const KEY = '商户支付密钥';

    const APPSECRET = '公众帐号secert';

    (4)打开lib文件夹下的WxPay.Notify.php文件,第79行的代码:if($needSign == true &&

    $this->GetReturn_code($return_code) == "SUCCESS")

    {

    $this->SetSign();

    }

    改成:if($needSign == true &&

    $this->GetReturn_code() == "SUCCESS")

    {

    $this->SetSign();

    }

    (5)打开cert证书目录,将里边的两个证书换成自己的支付证书。

    2.公众号后台设置

    (1)配置网页授权域名,我的域名是(xy.chuyin.ren);

    ae5361f277f5d5ed54a2167bcd55ca62.png

    (1)配置支付授权目录,域名是(xy.chuyin.ren),我将demo放到此域名指向的目录的weixinopen/文件夹下,demo中jsapi.php文件位于example/目录下,所以支付授权目录为:xy.chuyin.ren/weixinopen/wxpay/example/

    fad927881a03d36ee92d8c7c869b3070.png

    3.支付流程

    打开example目录下的jsapi.php文件,支付发起和处理,都是在这里完成。

    (1)获取用户openid

    之前配置好了自己的APPID和APPSecert,所以这里不用处理。//①、获取用户openid

    $tools = new JsApiPay();

    $openId = $tools->GetOpenid();

    这里首先初始化的一个JsApiPay()类得到一个对象,文件对应example/目录下的WxPay.JsApiPay.php,调用GetOpenid()方法,会自动获取自己的openID。

    (2)统一下单//②、统一下单

    $input = new WxPayUnifiedOrder();

    $input->SetBody("test");

    $input->SetAttach("test");

    $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));

    $input->SetTotal_fee("1");

    $input->SetTime_start(date("YmdHis"));

    $input->SetTime_expire(date("YmdHis", time() + 600));

    $input->SetGoods_tag("test");

    $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");

    $input->SetTrade_type("JSAPI");

    $input->SetOpenid($openId);

    $order = WxPayApi::unifiedOrder($input);

    echo '统一下单支付单信息
    ';

    printf_info($order);

    $jsApiParameters = $tools->GetJsApiParameters($order);

    对应WxPay.Api.php的第24行的unifiedOrder()方法,配置订单信息和支付回调函数,这里需要修改几个参数:

    A. 商品名称:$input->SetBody("test");

    B. 订单号$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));

    C. 支付金额$input->SetTotal_fee("1");

    D. 支付验证链接

    设置为你的notify.php文件所在的位置,所以我这里设置为:http://xy.chuyin.ren/weixinopen/wxpay/example/notify.php

    也可以写其他地址,当然要在支付授权域名之下,支付成功之后就会自动回调到该链接指定的方法里边,可以在里边进行判断和数据库操作.$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");

    E. 附加参数$input->SetAttach("test");

    附加参数,可填可不填,填写的话,里边字符串最好不要出现空格。

    这时候,点击支付应该就可以成功支付了。

    (3)发起支付

    //调用微信JS api 支付

    function jsApiCall()

    {

    WeixinJSBridge.invoke(

    'getBrandWCPayRequest',

    <?php echo $jsApiParameters; ?>,

    function(res){

    WeixinJSBridge.log(res.err_msg);

    alert(res.err_code+res.err_desc+res.err_msg);

    }

    );

    }

    function callpay()

    {

    if (typeof WeixinJSBridge == "undefined"){

    if( document.addEventListener ){

    document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);

    }else if (document.attachEvent){

    document.attachEvent('WeixinJSBridgeReady', jsApiCall);

    document.attachEvent('onWeixinJSBridgeReady', jsApiCall);

    }

    }else{

    jsApiCall();

    }

    }

    点击立即支付按钮调用的就是 callpay() 函数,他有会调用jsApiCall() 函数打开支付程序。

    d6ee2733e884bcc73469f7798ad1e2bf.png

    jsApiCall() 函数会监听每一步动作:

    3331c6a73fcc1a071a5e510bf260dea5.png

    res.err_msg 为get_brand_wcpay_request:cancel 表明前端判断的取消支付,es.err_msg 为get_brand_wcpay_request:ok 表明前端判断的支付成功,我们可以根据这个将支付跳转到成功页面。

    (4)支持成功回调

    通过前端jsApiCall()函数可以监听支付结果,但是这个并不可信。确认是否支付成功还是应当通过notify.php 处理业务逻辑。前边配置好了支付验证链接SetNotify_url(),支付完成后,微信服务器会根据链接自动请求你的notify.php文件,打开这个文件,其实这个文件最主要的代码就两行:$notify = new PayNotifyCallBack();

    $notify->Handle(false);

    由此跟踪到WxPay.Notify.php类文件的Handle()函数:/**

    *

    * 回调入口

    * @param bool $needSign 是否需要签名输出

    */

    final public function Handle($needSign = true)

    {

    $msg = "OK";

    //当返回false的时候,表示notify中调用NotifyCallBack回调失败获取签名校验失败,此时直接回复失败

    $result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg);

    if($result == false){

    $this->SetReturn_code("FAIL");

    $this->SetReturn_msg($msg);

    $this->ReplyNotify(false);

    return;

    } else {

    //该分支在成功回调到NotifyCallBack方法,处理完成之后流程

    $this->SetReturn_code("SUCCESS");

    $this->SetReturn_msg("OK");

    }

    $this->ReplyNotify($needSign);

    }

    主要代码:$result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg);

    然后来到WxPay.Api.php文件的第411行,notify()函数:

    /**

    *

    * 支付结果通用通知

    * @param function $callback

    * 直接回调函数使用方法: notify(you_function);

    * 回调类成员函数方法:notify(array($this, you_function));

    * $callback 原型为:function function_name($data){}

    */

    public static function notify($callback, &$msg)

    {

    //获取通知的数据

    $xml = $GLOBALS['HTTP_RAW_POST_DATA'];

    //file_put_contents('log.txt',$xml,FILE_APPEND);

    //如果返回成功则验证签名

    try {

    $result = WxPayResults::Init($xml);

    } catch (WxPayException $e){

    $msg = $e->errorMessage();

    return false;

    }

    return call_user_func($callback, $result);

    }

    这里面的$xml=$GLOBALS['HTTP_RAW_POST_DATA'],就是支付成功后用户返回给你的一个结果,他是一个xml格式的字符串。

    aa2ccd681d3619411ef65291af2f13b4.png

    我们可以将这里返回的xml数据记录下来,然后打开看看$out_trade_no就是在支付之前我自己设置的订单号码,$attach就是设置的附加参数。

    得到了这个订单号,然后我就直接在下面写支付成功后的逻辑了,比如改变数据库中的数据等等。

    这样 微信支付的 JsApi支付就大致分析完成了。

    0df5102bc1f5ebb070bc2afc82569520.png

    这是集成了官方的SDK实现的,如果不使用SDK,可以使用更简单的方法,见:PHP实现微信支付(jsapi支付)和退款(无需集成支付SDK).

    更多PHP相关知识,请访问PHP教程!

    展开全文
  • 微信JSAPI支付包含(关闭订单、查询订单、查询退款、下载对账单、申请退款)Demo
  • 一、首先先确定H5支付权限已经申请!...3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页 4、中间页进行H5权限的校验,安全性检查(此处常见...

    一、首先先确定H5支付权限已经申请!

    二、开发流程

    1、用户在商户侧完成下单,使用微信支付进行支付

    2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB

    3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页

    4、中间页进行H5权限的校验,安全性检查(此处常见错误请见下文)

    5、如支付成功,商户后台会接收到微信侧的异步通知

    6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面)

    7、商户在展示页面,引导用户主动发起支付结果的查询

    8,9、商户后台判断是否接到收微信侧的支付结果通知,如没有,后台调用我们的订单查询接口确认订单状态

    10、展示最终的订单支付结果给用户

    三、开发过程

    1、配置相关参数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    class  WechatPayConf
    {
         
         const  APPID =  '' ; //APPID
         const  MCH_ID =  '' ; //商户号
         const  KEY =  '' ; //商户key
         const  NOTIFY_URL =  '' ; //回调地址
     
    }

     

    2、统一下单

    接口链接

    URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

    请求参数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <xml>
    <appid>wx2421b1c4370ec43b</appid>
    <attach>支付测试</attach>
    <body>H5支付测试</body>
    <mch_id>10000100</mch_id>
    <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
    <notify_url>http: //wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
    <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
    <out_trade_no>1415659990</out_trade_no>
    <spbill_create_ip>14.23.150.211</spbill_create_ip>
    <total_fee>1</total_fee>
    <trade_type>MWEB</trade_type>
    <scene_info>{ "h5_info" : { "type" : "IOS" , "app_name" "王者荣耀" , "package_name" "com.tencent.tmgp.sgame" }}</scene_info>
    <sign>0CB01533B8C1EF103065174F50BCA001</sign>
    </xml>

      

    PHP代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    /**
      * 统一支付接口类
      */
    class  UnifiedOrder_pub  extends  Wxpay_client_pub
    {  
         function  __construct()
         {
             //设置接口链接
             $this ->url =  "https://api.mch.weixin.qq.com/pay/unifiedorder" ;
             //设置curl超时时间
             $this ->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
         }
         
         /**
          * 生成接口参数xml
          */
         function  createXml()
         {
             try
             {
                 //检测必填参数
                 if ( $this ->parameters[ "out_trade_no" ] == null)
                 {
                     throw  new  SDKRuntimeException( "缺少统一支付接口必填参数out_trade_no!" . "<br>" );
                 } elseif ( $this ->parameters[ "body" ] == null){
                     throw  new  SDKRuntimeException( "缺少统一支付接口必填参数body!" . "<br>" );
                 } elseif  ( $this ->parameters[ "total_fee" ] == null ) {
                     throw  new  SDKRuntimeException( "缺少统一支付接口必填参数total_fee!" . "<br>" );
                 } elseif  ( $this ->parameters[ "notify_url" ] == null) {
                     throw  new  SDKRuntimeException( "缺少统一支付接口必填参数notify_url!" . "<br>" );
                 } elseif  ( $this ->parameters[ "trade_type" ] == null) {
                     throw  new  SDKRuntimeException( "缺少统一支付接口必填参数trade_type!" . "<br>" );
                 } elseif  ( $this ->parameters[ "trade_type" ] ==  "JSAPI"  &&
                     $this ->parameters[ "openid" ] == NULL){
                     throw  new  SDKRuntimeException( "统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!" . "<br>" );
                 }
                 $this ->parameters[ "appid" ] = WxPayConf_pub::APPID; //公众账号ID
                 $this ->parameters[ "mch_id" ] = WxPayConf_pub::MCHID; //商户号
                 $this ->parameters[ "spbill_create_ip" ] =  $_SERVER [ 'REMOTE_ADDR' ]; //终端ip      
                 $this ->parameters[ "nonce_str" ] =  $this ->createNoncestr(); //随机字符串
                 $this ->parameters[ "sign" ] =  $this ->getSign( $this ->parameters); //签名
                 return   $this ->arrayToXml( $this ->parameters);
             } catch  (SDKRuntimeException  $e )
             {
                 die ( $e ->errorMessage());
             }
         }
         
         /**
          * 获取prepay_id
          */
         function  getPrepayId()
         {
             $this ->postXml();
             $this ->result =  $this ->xmlToArray( $this ->response);
             $prepay_id  $this ->result[ "prepay_id" ];
             return  $prepay_id ;
             
         }
         
    }

     

    如果调用正常,就会得到一个支付url

     

    其它常见错误

     

    序号问题错误描述解决方法
    1268498465网络环境未能通过安全验证,请稍后再试1. 商户侧统一下单传的终端IP(spbill_create_ip)与用户实际调起支付时微信侧检测到的终端IP不一致导致的,这个问题一般是商户在统一下单时没有传递正确的终端IP到spbill_create_ip导致,详细可参见客户端ip获取指引

    2. 统一下单与调起支付时的网络有变动,如统一下单时是WIFI网络,下单成功后切换成4G网络再调起支付,这样可能会引发我们的正常拦截,请保持网络环境一致的情况下重新发起支付流程

    2268443815商家参数格式有误,请联系商家解决

    1. 当前调起H5支付的referer为空导致,一般是因为直接访问页面调起H5支付,请按正常流程进行页面跳转后发起支付,或自行抓包确认referer值是否为空


    2. 如果是APP里调起H5支付,需要在webview中手动设置referer,如(
    Map<string,string> extraHeaders = new HashMap<string,string>();
    extraHeaders.put("Referer", "商户申请H5时提交的授权域名");//例如 http://www.baidu.com ))

    3268443816商家存在未配置的参数,请联系商家解决1,当前调起H5支付的域名(微信侧从referer中获取)与申请H5支付时提交的授权域名不一致,如需添加或修改授权域名,请登陆商户号对应的商户平台--"产品中心"--"开发配置"自行配置 

    2,如果设置了回跳地址redirect_url,请确认设置的回跳地址的域名与申请H5支付时提交的授权域名是否一致
    4268498468支付请求已失效,请重新发起支付统一下单返回的MWEB_URL生成后,有效期为5分钟,如超时请重新生成MWEB_URL后再发起支付
    6请在微信外打开订单,进行支付H5支付不能直接在微信客户端内调起,请在外部浏览器调起
     
     
    展开全文
  • tp5微信jsapi支付

    2018-04-17 16:12:01
    thinkphp 5 微信公众号支付 扫码支付 小程序支付 方法封装
  • 上一篇PHP微信公众号JSAPI网页支付(上)中讲到了公众号平台的相关设置以及支付的大致流程。这一篇重点讲支付后,异步接受回调通知,以及处理后同步通知微信服务器。首先梳理下整个jsapi支付的流程1.网页授权获取用户...

    上一篇PHP微信公众号JSAPI网页支付(上)中讲到了公众号平台的相关设置以及支付的大致流程。

    这一篇重点讲支付后,异步接受回调通知,以及处理后同步通知微信服务器。

    首先梳理下整个jsapi支付的流程

    1.网页授权获取用户openid

    2.使用统一下单支付接口,生成JSAPI页面调用的支付参数并签名。

    3.使用JSAPI调起支付

    4.支付后回调(包括接受异步通知以及做出同步处理)

    下面讲一些实际中踩到的坑,注意啦

    1.官方demo中的一些需要修改的地方

    1)打开lib文件夹下的WxPay.Api.PHP文件,在537行有一段curl网络请求配置代码:

    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);

    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验

    替换成

    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//非严格校验

    另外说明下:

    在46-49行有一段代码:

    //异步通知url未设置,则使用配置文件中的url

    if(!$inputObj->IsNotify_urlSet()){

    $inputObj->SetNotify_url(WxPayConfig::NOTIFY_URL);//异步通知url

    }

    对应的做法是在WxPay.Config.php 中加上这个配置,根据实际回调地址填写

    例如:const NOTIFY_URL="http://paysdk.weixin.qq.com/example/notify.php";

    2)打开lib文件夹下的WxPay.Notify.php文件,第79行的代码:

    if($needSign == true &&

    $this->GetReturn_code($return_code) == "SUCCESS")

    {

    $this->SetSign();

    }

    替换成

    if($needSign == true &&

    $this->GetReturn_code() == "SUCCESS")

    {

    $this->SetSign();

    }

    3)打开lib文件夹下的WxPay.JsApi.php文件,在99行有一段curl网络请求配置代码:

    curl_setopt($ch, CURLOPT_TIMEOUT, $this->curl_timeout);

    替换成

    curl_setopt($ch, CURLOPT_TIMEOUT, 30);  //此处可根据实际情况填写,单位(秒)

    2.支付回调验证链接,必须是没有权限验证的

    如果你填写的回调链接,还需要登录注册验证的,就不要尝试了,必须要可以无障碍访问的链接,而且也不要有一连串的参数传递。

    最好就是简单粗暴的[http://serverName/xxx.php]

    以ThinkPHP举例,比如在根目录下,类似于index.php,重新写了一个专门的供支付回调的入口文件payment.php,

    和它对应的Application/目录下的模块(WexinApi)、控制器(WeixinPay)及方法(notify)

    如图:payment.php

    5dfac38332c057e913274a0c00157314.png

    纠正一下,上图最后引入ThinkPHP入口文件那句应该改成: require ‘./ThinkPHP/ThinkPHP.php’

    现在访问[http://serverName/payment.php],就会直接进入到[http://serverName/payment.php/WexinApi/WeixinPay/notify],

    这样回调验证链接可以写[http://serverName/payment.php],也可以写[http://serverName/payment.php/WexinApi/WeixinPay/notify]。

    支付完成,就会进入到之前写好的链接对应的方法

    说明:下面那个$data截图不完整,应该是$data=json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA)),true);

    afe9f822a12575e7193cd9fd6115b420.png

    这里有两个地方要注意:

    1)升级完PHP7 发现微信支付回调失败。原来是 $GLOBALS['HTTP_RAW_POST_DATA']没有定义的问题。php7 移除了这个全局变量。

    像下面这样写就要严谨一点:

    $xml = $GLOBALS['HTTP_RAW_POST_DATA'];//这里在php7下不能获取数据,使用 php://input 代替

    if(!$xml){

    $xml = file_get_contents("php://input");

    }

    或者直接写$xml=file_get_contents("php://input");

    2)此处file_put_contents(日志文件路径,$xml,FILE_APPEND),linux下,这个地方最好写全局路径:/data/wwwroot/...

    为了安全起见,对返回过来的签名,要重新验证:

    fdd62d722424702d7c17bfa5ee078d67.png

    参考文章:http://blog.csdn.net/sinat_35861727/article/details/72783988

    展开全文
  • vue接入微信jsapi支付

    千次阅读 2020-01-03 14:51:51
    在h5中接入微信jsapi支付 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有: ◆ 用户在微信公众账号内进入商家公众号,打开某个主页面...
  • 微信JSAPI支付

    千次阅读 2016-11-30 10:09:56
    微信Native支付官方文档有点小坑,摸索了半天,总结一下: 1.首先肯定是要开通微信支付功能 2.设置支付授权目录 3.设置js安全域名 ...这里我没有使用官方给的支付demo,我在网上找了一个,然后
  • 微信 JSAPI 支付

    2020-05-23 20:21:14
    一、申请微信公众号、开通微信支付,通过【APPID】将两者关联,具体操作步骤参考:点击查看 二、在公众号管理后台设置...七、生成 JSAPI 支付需要的参数 八、用户输完支付密码,前台轮询订单状态,后台在 NOTIFY_U...
  • 微信支付服务商jsapi支付demo.zip
  • C# .NETMVC 微信JSAPI支付

    2020-08-26 20:01:57
    C# .NET MVC微信JSAPI支付 经过本人不断翻找资料和百度终于结合一些大佬的经验和思路弄出来一个MVC的微信支付了。 再弄微信支付之前我们需要先有一个商户号,并且开通了微信支付的JSAPI支付功能,也需要申请微信...
  • .net 微信jsapi支付

    2015-07-10 19:05:53
    改善官网提供demo 已经在实际项目中使用
  • 微信支付服务商jsapi支付demo
  • 微信JSAPI公众号支付是素材火群主提供的,支付成功后跳转到订单详情页,里面是微信支付成功后回调的数据,由第三方微信支付平台定时请求获取。下载资源下载积分:780积分回调地址notify.php,微信服务器推送的信息...
  • 微信JSAPI错误填坑
  • 微信jsapi支付自2020年7月更新,新增了点金计划,原来的支付成功跳转不能用了 if(res.err_msg == "get_brand_wcpay_request:ok" ) { //支付成功跳转页面 }else if(res.err_msg == "get_brand_wcpay_request:...
  • 转载-微信JSapi支付

    2020-09-28 11:05:56
    [转载:手把手教你–JAVA微信支付(公众号支付JSAPI)] 自己的第一篇博客,请各位看官海涵! JAVA开发微信支付-公众号支付/微信浏览器支付JSAPI) 写这篇文章的目的有2个,一是自己的项目刚开发完微信支付功能,趁热回...
  • C# .NET MVC微信JSAPI支付

    2020-08-08 17:03:38
    C# .NET MVC微信JSAPI支付 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:Visual Studio 2015 ASP .NET MVC 作者:熊俊杰 撰写时间:2020.8.7 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...
  • 微信jsapi支付

    千次阅读 2020-06-23 10:38:48
    $url="https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi"; $date["amount"]["total"]=1;//订单总金额,单位为分。 示例值:100 $date["amount"]["currency"]="CNY";//CNY:人民币,境内商户号仅支持人民币 ...
  • 微信JSAPI支付PHP源码

    千次阅读 2019-06-27 10:30:52
    微信支付,开发过的小朋友都踩过坑,在此附上jsapi源码,希望帮到小伙伴们。 1、支付授权目录设置 2、公众平台,用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以...
  • 使用Laravel-Pay组件快速接入支付(1:微信支付篇) 本文为系列文章,接下来分别会讲解如何...本篇介绍微信 H5、JSAPI(公众号)、APP、小程序支付、Native支付(手机扫网站二维码进行支付)、需要的基础资料 一、前期
  • asp.net 微信jsapi支付

    千次阅读 2016-11-04 17:18:23
    开始做jsapi支付时看了好多的demo及好多的博客感觉有大坑,果不其然,一点一点从坑中爬出。 前期准备,首先微信公众号中的配置,现在微信支付中配置好支付授权目录,先解释一下支付授权目录时做什么的,在微信...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,337
精华内容 934
热门标签
关键字:

微信jsapi支付demo