精华内容
下载资源
问答
  • 主要介绍了微信支付jsapi缺少参数 total_fee 错误分析与解决方法,需要的朋友可以参考下
  • PHP搞定微信支付jsapi

    2020-07-01 13:59:08
    最近因项目需要接入微信支付,下载了官方的dome,正常配置后发现无法执行,最终用这个文件实现了支付接口。。。
  • 微信支付jsAPI

    热门讨论 2014-08-13 10:46:27
    需要修改weixin_pay.js里面的参数为自己的公众号参数,调用说明:http://www.cnblogs.com/Xjng/p/3909450.html
  • 微信支付JSAPI,javaDEMO

    2015-08-28 17:09:55
    文件包括微信支付说明,源码,支付页面,程序说明,都有注释,里面的代码可以自己精简,该方式必须获取openid,不懂的可以一起研究361346846@qq.com,不管那门语言思路肯定都一样。
  • 这是一款用asp开发的微信支付jsapi接口,让你的asp老程序实现现在流行的微信支付。 需要注册里面的dll组件。
  • 主要介绍了ThinkPHP实现微信支付(jsapi支付)流程教程详解,需要的朋友可以参考下
  • net微信扫码支付、手机网页H5支付微信JSAPI支付,里面文档有基本的配置
  • JSAPI微信支付 (需要在公众号后台配置一下,paydatac变量需要后台返回 微信签名之类的) if (typeof WeixinJSBridge == undefined) { if (document.addEventListener) { document.addEventListener('...
  • 本篇文章给大家介绍PHP实现微信支付(jsapi支付)和退款(无需集成支付SDK)流程教程详解,使用了微信官方给的php版本的sdk,但是在使用过程中有很多问题,今天给大家讲讲不集成支付SDK直接调用支付接口实现支付和退款,...
  • 3.要设置 JSAPI支付 支付授权目录(微信支付->产品中心->开发配置->支付配置->JSAPI支付授权目录,设置域名就可以) 方法步骤: 1.解压下载的demo文件夹改名为WxpayJSAPI(自己命名),整个复制到核心...

    前期准备:

    1.微信认证服务号,并且开通了微信支付
    2.微信支付SDK,下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
    3.要设置 JSAPI支付 支付授权目录(微信支付->产品中心->开发配置->支付配置->JSAPI支付授权目录,设置域名就可以)

    在这里插入图片描述

    方法步骤:

    1.解压下载的demo文件夹改名为WxpayJSAPI(自己命名),整个复制到核心框架ThinkPHP\Library\Vendor中方便调用。
    在这里插入图片描述

    2.将example以及lib中的文件,引入外部文件require_once的路径修改,类似于require_once “…/” 的路径全部改成下图所示。
    在这里插入图片描述

    3.编写支付的控制器以及视图,比如 我写的是控制器TestController,方法是wxJsApiTest页面,大部分代码是demo里面的。

     public function wxJsApiTest()
        {
    
            /**
             *
             * example目录下为简单的支付样例,仅能用于搭建快速体验微信支付使用
             * 样例的作用仅限于指导如何使用sdk,在安全上面仅做了简单处理, 复制使用样例代码时请慎重
             * 请勿直接直接使用样例对外提供服务
             *
             **/
            vendor('WxpayJSAPI.example.WxPay#JsApiPay');//引入文件
            header("Content-Type: text/html;charset=utf-8");
    		//①、获取用户openid
            try{
                $tools =  new \JsApiPay();
                $openId = $tools->GetOpenid();
                //②、统一下单
                $input = new \WxPayUnifiedOrder();
                $input->SetBody("test");
                $input->SetAttach("test");
                $input->SetOut_trade_no("sdkphp".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://www.xxxx.com/Home/Test/huidiaojsapi");
                $input->SetTrade_type("JSAPI");
                $input->SetOpenid($openId);
                $config = new \WxPayConfig();
                $order = \WxPayApi::unifiedOrder($config, $input);
                echo '<font color="#f00"><b>统一下单支付单信息</b></font><br/>';
                $this->printf_info($order);
                $jsApiParameters = $tools->GetJsApiParameters($order);
    
                //获取共享收货地址js函数参数
                $editAddress = $tools->GetEditAddressParameters();
            } catch(Exception $e) {
                //Log::ERROR(json_encode($e));
            }
    //③、在支持成功回调通知中处理成功之后的事宜,见 notify.php
            /**
             * 注意:
             * 1、当你的回调地址不可访问的时候,回调通知会失败,可以通过查询订单来确认支付是否成功
             * 2、jsapi支付时需要填入用户openid,WxPay.JsApiPay.php中有获取openid流程 (文档可以参考微信公众平台“网页授权接口”,
             * 参考http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html)
             */
             return $this->render('Test:wxJsApiZf', array(
                    'openid'    => 123,
                    'jsApiParameters' =>$jsApiParameters,
                    'editAddress' => $editAddress
          ));
        }
    //打印输出数组信息
        public function printf_info($data)
        {
            foreach($data as $key=>$value){
                echo "<font color='#00ff55;'>$key</font> :  ".htmlspecialchars($value, ENT_QUOTES)." <br/>";
            }
        }
    

    视图:(截取了部分代码,根据自己的需求进行美化,大部分也是demo里面的)

    <html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <title>微信支付样例-支付</title>
        <script type="text/javascript">
            //调用微信JS api 支付
            function jsApiCall()
            {
                var jsApiParameters = "{{ jsApiParameters }}".replace( /&quot;/g, '"' );
                jsApiParameters = JSON.parse(jsApiParameters);
                WeixinJSBridge.invoke(
                    'getBrandWCPayRequest',{
                        "appId":jsApiParameters.appId,     //公众号名称,由商户传入
                        "timeStamp":jsApiParameters.timeStamp,         //时间戳,自1970年以来的秒数
                        "nonceStr":jsApiParameters.nonceStr, //随机串
                        "package":jsApiParameters.package,
                        "signType":jsApiParameters.signType,         //微信签名方式:
                        "paySign":jsApiParameters.paySign //微信签名
                    },
                function(res){
                    if(res.err_msg === 'get_brand_wcpay_request:ok'){
                        alert("支付成功");
                    }else if(res.err_msg === 'get_brand_wcpay_request:cancel'){
                        alert("取消支付!");
                    }
                }
            );
            }
    
            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();
                }
            }
        </script>
    </head>
    <body>
    <br/>
    <font color="#9ACD32"><b>该笔订单支付金额为<span style="color:#f00;font-size:50px">1分</span></b></font><br/><br/>
    <div align="center">
        <button style="width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer;  color:white;  font-size:16px;" type="button" onclick="callpay()" >立即支付</button>
    </div>
    </body>
    </html>
    

    访问页面
    http://test.xxxx.com/Home/Test/wxJsApiTest
    要用真机调试,微信开发者工具 只能看样式
    在这里插入图片描述

    回调 这里配置回调路径
    在这里插入图片描述

    在这里插入图片描述

    回调内容

    <xml>
      <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
      <attach><![CDATA[支付测试]]></attach>
      <bank_type><![CDATA[CFT]]></bank_type>
      <fee_type><![CDATA[CNY]]></fee_type>
      <is_subscribe><![CDATA[Y]]></is_subscribe>
      <mch_id><![CDATA[10000100]]></mch_id>
      <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
      <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
      <out_trade_no><![CDATA[1409811653]]></out_trade_no>
      <result_code><![CDATA[SUCCESS]]></result_code>
      <return_code><![CDATA[SUCCESS]]></return_code>
      <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
      <time_end><![CDATA[20140903131540]]></time_end>
      <total_fee>1</total_fee>
      <coupon_fee><![CDATA[10]]></coupon_fee>
      <coupon_count><![CDATA[1]]></coupon_count>
      <coupon_type><![CDATA[CASH]]></coupon_type>
      <coupon_id><![CDATA[10000]]></coupon_id>
      <trade_type><![CDATA[JSAPI]]></trade_type>
      <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
    </xml>
    

    遇到的问题,记下来供大家参考。

    (1)curl出错 错误码:60
    解决方法:在WxPay.Api.php文件中

    //找到以下两行代码:
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
    //改成
    if(stripos($url,"https://")!==FALSE){
        curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    }else{
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
    }
    

    (2)URL未注册
    解决方法:
    首先确定了支付授权目录设置没有问题,最后发现是URL_MODEL 为pathinfo 的问题,一开始我写的跳转到支付的页面的网址形式是这种http://xxx.com/Weixinpay/index/id/1 ,其实我们认为Weixinpay是目录而已,后面是文件,id是参数,但微信认为是到最后一个斜杠为止都是目录,也就是id,最后我改成了http://xxx.com/Weixinpay/index?id=1,测试成功。
    (3)errMsg: “chooseWXPay:fail, the permission value is offline verifying”
    解决办法:
    要用真机调试
    (4)errMsg":“translateVoice:fail, the permission value is offline verifying”
    解决办法:
    自己写的参数,没有使用原来的直接放参数

    在这里插入图片描述

    在这里插入图片描述

    备注

    参考支付:
    https://blog.csdn.net/wyy20/article/details/104601665
    支付结果通知
    https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
    业务流程
    https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4
    支付常见问题
    https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=7_9&index=7

    展开全文
  • 微信支付JSAPI

    千次阅读 2019-08-03 16:01:24
    JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款。 应用场景有: 线下场所:调用接口生成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付 公众号场景:用户...

    一、什么是JSAPI支付

    JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款。

    应用场景有:

    线下场所:调用接口生成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付

    公众号场景:用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付

    PC网站场景:在网站中展示二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付

    我们这里采用的是PC网站场景。

    二、准备工作

    1、申请入口:登录商户平台-->产品中心-->我的产品-->支付产品-->jsapi支付

    2、浏览开发文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3,这里面几乎介绍了全部流程。

    3、在微信公众平台和微信商户平台拿到或配置一下参数:

             appid:公众平台的appid 

             商户号:公众平台的商户号

            appsecrut:商户平台里的签名密钥(这个要保存好,现在不支持查看,忘了就得重新配置了)

            商户支付密钥Key:api_key 审核通过后,在微信发送的邮件中查看
    a、微信商户平台(pay.weixin.qq.com)设置您的JSAPI支付支付目录,设置路径:商户平台-->产品中心-->开发配置

    b、在公众平台设置网页授权域名(开发JSAPI支付时,在统一下单接口中要求必传用户openid,而获取openid则需要您在公众平台设置获取openid的域名,只有被设置过的域名才是一个有效的获取openid的域名,否则将获取失败)

    三、下单流程:

    jsapia支付和H5支付的流程:

    H5支付 调用https://api.mch.weixin.qq.com/pay/unifiedorder 接口

    当返回值return_code 和result_code都为SUCCESS的时候,使用其中的参数mweb_url :为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。

    jsapi支付:调用https://api.mch.weixin.qq.com/pay/unifiedorder 接口  

    (商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易会话标识后再按Native、JSAPI、APP等不同场景生成交易串调起支付)

    回到这里:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6  在微信浏览器里面打开H5网页中执行JS调起支付

    在jsapi预支付的过程中和H5支付的区别为:

    1,trade_type不同->MWEB-H5支付,JSAPI -JSAPI支付

    2,jsapi支付的时候需要传递openid,用户在商户appid下的唯一标识。openid如何获取参考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

    首先需要获取到code值:

    (补充以下链接参数访问之后,地址发生改变,其中就有code值,,,其中code值无法直接将地址从地址栏中粘贴出来,alert("页面首部展示路径  :  "+$location.absUrl())会看出来有值)

    参考链接(请在微信客户端中打开此链接体验):
    scope为snsapi_base
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect

    获取到code之后即可根据code值获取到openid 

    public String getOpenId(String code, String appId){
    		String openId ="";
    		String secret =Config.getValue("weixin.appsecret");
    		log.error("appid:______________"+appId);
    		log.error("SECRET:______________"+secret);
    		String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + "appid=" + appId
    				+ "&secret=" + secret 
    				+ "&code="+ code 
    				+ "&grant_type=authorization_code";
    		//http连接
    		HttpClient client = new HttpClient(); 
    		GetMethod method = new GetMethod(url); 
    		client.getParams().setContentCharset("UTF-8");
    		method.setRequestHeader("ContentType","application/x-www-form-ACCESS_TOKEN_OPENIDencoded;charset=UTF-8");
    		try {
    			client.executeMethod(method);
    			String SubmitResult =method.getResponseBodyAsString();
    			log.debug("------openId请求----------------"+SubmitResult);
    			Map map=new HashMap();
    			map = (Map)(new ObjectMapper()).readValue(SubmitResult, Map.class);
    			openId = (String) map.get("openid");	//获取openID
    			String errcode = String.valueOf((Integer) map.get("errcode"));	//获取错误码
    			log.error("【获取openId的具体内容】  : "+SubmitResult);
    			log.debug("【openId请求---errcode】 :  "+errcode);
    			log.debug("【openId请求---openId】 : "+openId);
    		} catch (HttpException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} 
    		return openId;
    	}

     

            

     

     

    展开全文
  • .net版微信支付JSAPI

    2021-02-06 22:47:52
    标签:前段时间做了一个微信公众号,里面涉及到了微信支付这一个功能,于是在微信公众号平台里面下了那个.net版本的SDK,可能由于我以前也没有接触过微信支付这一块,所以将SDK部署到我的项目中的后,还是支付不了,...

    标签:

    前段时间做了一个微信公众号,里面涉及到了微信支付这一个功能,于是在微信公众号平台里面下了那个.net版本的SDK,可能由于我以前也没有接触过微信支付这一块,所以将SDK部署到我的项目中的后,还是支付不了,而且网上关于.net版本的资料算是比较少的,基本上都是Java和PHP的,我写这篇文章的主要目地就是为了那些刚接触.net微信支付的朋友可以借鉴一下,少走一些弯路,好了,下来开始来说说关于用.net开发微信支付的一些方面。

    1、公众号加入微信支付需要公众号开通商户后台功能

    2、需要在微信公众号后台设置支付目录,支付目录必须是二级目录以上,如:http://cnblogs.com/pay/,你的支付页面就是在pay文件下

    3、在测试阶段需要测试支付是否可行的话,需要在后台微信支付中设置支付白名单,白名单中的用户就可能测试支付了,不了解的可以自行去后台设置中看一下基本就明白了

    下面说说关于支付一的些代码

    后台:

    protected string wx_packageValue = "";

    protected void Page_Load(object sender, EventArgs e)

    {

    if (!IsPostBack)

    {

    string strWeixin_OpenID = "";//openid的获取这里就不多述说了

    string strBillNo="10000001";//订单号

    decimal pay = decimal.Parse("0.01");//这里为支付的金额

    string _Pay_Package = Interface_WxPay.Get_RequestHtml(strWeixin_OpenID, strBillNo, pay, "支付测试", "hb_store");//该方法中的具体实现结合微信提供的SDK就可以实现

    //微信jspai支付

    if (_Pay_Package.Length > 0)

    {

    wx_packageValue = _Pay_Package;

    }

    }

    }

    前台:

    //需要引用两个js包

    // 当微信内置浏览器完成内部初始化后会触发WeixinJSBridgeReady事件。

    document.addEventListener(‘WeixinJSBridgeReady‘, function onBridgeReady() {

    //公众号支付,getBrandWCPayRequest为支付按钮的ID

    jQuery(‘input#getBrandWCPayRequest‘).click(function (e) {

    WeixinJSBridge.invoke(‘getBrandWCPayRequest‘, , function (res) {

    if (res.err_msg == "get_brand_wcpay_request:ok") {

    //成功,进入支付成功页面

    }else

    {

    //失败,进入支付失败页面

    }

    //微信官方说明

    // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。

    //因此微信团队建议,当收到ok返回时,向商户后台询问是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此时未收到通知,商户后台主动调用查询订单接口,查询订单的当前状态,并反馈给前端展示相应的界面。

    });

    });

    }, false)

    标签:

    展开全文
  • 1. 调起微信支付的域名要和微信支付配置的一致,导致无法本地测试 解决方案: 修改本地host文件将配置的域名指向本机, 手机wifi使用本机代理上网。 IJPay-All文档地址 1. maven中引入开发包 <dependency> <...

    1. 调起微信支付的域名要和微信支付配置的一致,导致无法本地测试

    解决方案: 修改本地host文件将配置的域名指向本机, 手机wifi使用本机代理上网。

    IJPay-All文档地址

    1. maven中引入开发包

    <dependency>
        <groupId>com.github.javen205</groupId>
        <artifactId>IJPay-WxPay</artifactId>
        <version>2.4.0</version>
    </dependency>
    

    2. 创建请求需要的参数类。配置信息在application中

    import lombok.Data;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Configuration;
    
    @Data
    @Configuration
    public class WxPayProperties {
        /**
         * 设置微信公众号或者小程序,h5等的appid.
         */
        @Value("${wx.pay.appId}")
        private String appId;
    
        /**
         * 微信支付商户号.
         */
        @Value("${wx.pay.mchId}")
        private String mchId;
    
        /**
         * 微信支付商户密钥.
         */
        @Value("${wx.pay.mchKey}")
        private String mchKey;
    
        /**
         * 异步回调地址
         */
        @Value("${wx.pay.notifyUrl}")
        private String notifyUrl;
    }
    
    
    application配置文件 如下
    wx:
      pay:
        appId: wx123223342341 # appid
        mchId: 123423123 # 商户号
        mchKey: U6gG1CqAqwedrfgfffrvfXFBokr # 秘钥 微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
        notifyUrl: http://169b91h550.imwork.net:35084/wx/wxPayNotice #可以被外网访问的接口 
    

    3. 封装JsApi支付工具

    package com.jyl.shop.config.wx;
    
    /**
     * 开发公司:个人
     * 版权:个人
     * <p>
     * JsApiOrderModel
     *
     * @author 刘志强
     * @created Create Time: 2019/12/21
     */
    
    import com.ijpay.core.model.BaseModel;
    
    public class JsApiOrderModel extends BaseModel {
        private String appid;
        private String sub_appid;
        private String mch_id;
        private String sub_mch_id;
        private String nonce_str;
        private String sign;
        private String body;
        private String attach;
        private String out_trade_no;
        private String fee_type;
        private String total_fee;
        private String spbill_create_ip;
        private String time_start;
        private String time_expire;
        private String limit_pay;
        private String contract_code;
        private String promotion_tag;
        private String trade_type;
        private String notify_url;
        private String device_info;
        private String mini_app_param;
        private String openid;
    
        public static JsApiOrderModelBuilder builder() {
            return new JsApiOrderModelBuilder();
        }
    
        private JsApiOrderModel(String appid, String sub_appid, String mch_id, String sub_mch_id, String nonce_str, String sign, String body, String attach, String out_trade_no, String fee_type, String total_fee, String spbill_create_ip, String time_start, String time_expire, String limit_pay, String contract_code, String promotion_tag, String trade_type, String notify_url, String device_info, String mini_app_param, String openid) {
            this.appid = appid;
            this.sub_appid = sub_appid;
            this.mch_id = mch_id;
            this.sub_mch_id = sub_mch_id;
            this.nonce_str = nonce_str;
            this.sign = sign;
            this.body = body;
            this.attach = attach;
            this.out_trade_no = out_trade_no;
            this.fee_type = fee_type;
            this.total_fee = total_fee;
            this.spbill_create_ip = spbill_create_ip;
            this.time_start = time_start;
            this.time_expire = time_expire;
            this.limit_pay = limit_pay;
            this.contract_code = contract_code;
            this.promotion_tag = promotion_tag;
            this.trade_type = trade_type;
            this.notify_url = notify_url;
            this.device_info = device_info;
            this.mini_app_param = mini_app_param;
            this.openid = openid;
        }
    
        public String getAppid() {
            return this.appid;
        }
    
        public String getSub_appid() {
            return this.sub_appid;
        }
    
        public String getMch_id() {
            return this.mch_id;
        }
    
        public String getSub_mch_id() {
            return this.sub_mch_id;
        }
    
        public String getNonce_str() {
            return this.nonce_str;
        }
    
        public String getSign() {
            return this.sign;
        }
    
        public String getBody() {
            return this.body;
        }
    
        public String getAttach() {
            return this.attach;
        }
    
        public String getOut_trade_no() {
            return this.out_trade_no;
        }
    
        public String getFee_type() {
            return this.fee_type;
        }
    
        public String getTotal_fee() {
            return this.total_fee;
        }
    
        public String getSpbill_create_ip() {
            return this.spbill_create_ip;
        }
    
        public String getTime_start() {
            return this.time_start;
        }
    
        public String getTime_expire() {
            return this.time_expire;
        }
    
        public String getLimit_pay() {
            return this.limit_pay;
        }
    
        public String getContract_code() {
            return this.contract_code;
        }
    
        public String getPromotion_tag() {
            return this.promotion_tag;
        }
    
        public String getTrade_type() {
            return this.trade_type;
        }
    
        public String getNotify_url() {
            return this.notify_url;
        }
    
        public String getDevice_info() {
            return this.device_info;
        }
    
        public String getMini_app_param() {
            return this.mini_app_param;
        }
    
        public String getOpenid() {
            return openid;
        }
    
        public static class JsApiOrderModelBuilder {
            private String appid;
            private String sub_appid;
            private String mch_id;
            private String sub_mch_id;
            private String nonce_str;
            private String sign;
            private String body;
            private String attach;
            private String out_trade_no;
            private String fee_type;
            private String total_fee;
            private String spbill_create_ip;
            private String time_start;
            private String time_expire;
            private String limit_pay;
            private String contract_code;
            private String promotion_tag;
            private String trade_type;
            private String notify_url;
            private String device_info;
            private String mini_app_param;
            private String openid;
    
            JsApiOrderModelBuilder() {
            }
    
            public JsApiOrderModelBuilder appid(String appid) {
                this.appid = appid;
                return this;
            }
    
            public JsApiOrderModelBuilder sub_appid(String sub_appid) {
                this.sub_appid = sub_appid;
                return this;
            }
    
            public JsApiOrderModelBuilder mch_id(String mch_id) {
                this.mch_id = mch_id;
                return this;
            }
    
            public JsApiOrderModelBuilder sub_mch_id(String sub_mch_id) {
                this.sub_mch_id = sub_mch_id;
                return this;
            }
    
            public JsApiOrderModelBuilder nonce_str(String nonce_str) {
                this.nonce_str = nonce_str;
                return this;
            }
    
            public JsApiOrderModelBuilder sign(String sign) {
                this.sign = sign;
                return this;
            }
    
            public JsApiOrderModelBuilder body(String body) {
                this.body = body;
                return this;
            }
    
            public JsApiOrderModelBuilder attach(String attach) {
                this.attach = attach;
                return this;
            }
    
            public JsApiOrderModelBuilder out_trade_no(String out_trade_no) {
                this.out_trade_no = out_trade_no;
                return this;
            }
    
            public JsApiOrderModelBuilder fee_type(String fee_type) {
                this.fee_type = fee_type;
                return this;
            }
    
            public JsApiOrderModelBuilder total_fee(String total_fee) {
                this.total_fee = total_fee;
                return this;
            }
    
            public JsApiOrderModelBuilder spbill_create_ip(String spbill_create_ip) {
                this.spbill_create_ip = spbill_create_ip;
                return this;
            }
    
            public JsApiOrderModelBuilder time_start(String time_start) {
                this.time_start = time_start;
                return this;
            }
    
            public JsApiOrderModelBuilder time_expire(String time_expire) {
                this.time_expire = time_expire;
                return this;
            }
    
            public JsApiOrderModelBuilder limit_pay(String limit_pay) {
                this.limit_pay = limit_pay;
                return this;
            }
    
            public JsApiOrderModelBuilder contract_code(String contract_code) {
                this.contract_code = contract_code;
                return this;
            }
    
            public JsApiOrderModelBuilder promotion_tag(String promotion_tag) {
                this.promotion_tag = promotion_tag;
                return this;
            }
    
            public JsApiOrderModelBuilder trade_type(String trade_type) {
                this.trade_type = trade_type;
                return this;
            }
    
            public JsApiOrderModelBuilder notify_url(String notify_url) {
                this.notify_url = notify_url;
                return this;
            }
    
            public JsApiOrderModelBuilder device_info(String device_info) {
                this.device_info = device_info;
                return this;
            }
    
            public JsApiOrderModelBuilder mini_app_param(String mini_app_param) {
                this.mini_app_param = mini_app_param;
                return this;
            }
    
            public JsApiOrderModelBuilder openid(String openid) {
                this.openid = openid;
                return this;
            }
    
            public JsApiOrderModel build() {
                return new JsApiOrderModel(this.appid, this.sub_appid, this.mch_id, this.sub_mch_id, this.nonce_str, this.sign, this.body, this.attach, this.out_trade_no, this.fee_type, this.total_fee, this.spbill_create_ip, this.time_start, this.time_expire, this.limit_pay, this.contract_code, this.promotion_tag, this.trade_type, this.notify_url, this.device_info, this.mini_app_param, this.openid);
            }
    
            @Override
            public String toString() {
                return "JsApiOrderModel.JsApiOrderModelBuilder(appid=" + this.appid + ", sub_appid=" + this.sub_appid + ", mch_id=" + this.mch_id + ", sub_mch_id=" + this.sub_mch_id + ", nonce_str=" + this.nonce_str + ", sign=" + this.sign + ", body=" + this.body + ", attach=" + this.attach + ", out_trade_no=" + this.out_trade_no + ", fee_type=" + this.fee_type + ", total_fee=" + this.total_fee + ", spbill_create_ip=" + this.spbill_create_ip + ", time_start=" + this.time_start + ", time_expire=" + this.time_expire + ", limit_pay=" + this.limit_pay + ", contract_code=" + this.contract_code + ", promotion_tag=" + this.promotion_tag + ", trade_type=" + this.trade_type + ", notify_url=" + this.notify_url + ", device_info=" + this.device_info + ", mini_app_param=" + this.mini_app_param+ ", openid=" + this.openid + ")";
            }
        }
    }
    
    

    3. 请求示例

    public Map<String,Object> wxJsApiPay(ShopOrders shopOrders) {
            ShopMember shopMember = shopMemberService.getMember();
            String ip = getIpAddr();
            Map<String, String> params = JsApiOrderModel
                    .builder()
                    .appid(wxPayProperties.getAppId())
                    .mch_id(wxPayProperties.getMchId())
                    .nonce_str(shopOrders.getOrderNo()) // 订单描述
                    .body("微信支付") 
                    .out_trade_no(shopOrders.getOrderNo()) // 订单号
                    .total_fee(String.valueOf((shopOrders.getRealTotalMoney().multiply(new BigDecimal("100"))).intValue())) // 支付金额
                    .spbill_create_ip(ip)
                    .notify_url(wxPayProperties.getNotifyUrl())
                    .trade_type(TradeType.JSAPI.getTradeType())
                    .openid("99999999999")
                    .build()
                    .createSign(wxPayProperties.getMchKey(), SignType.MD5);
            String xmlResult = WxPayApi.pushOrder(false, params);
    
            Map<String, String> resultMap = WxPayKit.xmlToMap(xmlResult);
            if (StringUtils.equals(resultMap.get("return_code"), "SUCCESS")) {
                String prepayId = resultMap.get("prepay_id");
                Map<String, String> packageParams = WxPayKit.prepayIdCreateSign(prepayId, wxPayProperties.getAppId(),
                        wxPayProperties.getMchKey(), SignType.MD5);
                // 微信浏览器中拿此参数调起支付
                return packageParams;
            }
            return null;
        }
    
    获取客户端IP地址
        private String getIpAddr() {
            String ip = request.getHeader("x-forwarded-for");
            if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
                // 多次反向代理后会有多个ip值,第一个ip才是真实ip
                if (ip.indexOf(",") != -1) {
                    ip = ip.split(",")[0];
                }
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("X-Real-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
            return ip != null ? ip : "192.168.0.1";
        }
    

    异步通知

        @PostMapping("/notifyUrl")
        public void notifyUrl(@RequestBody String xmlData) {
            Map<String, String> resultMap = WxPayKit.xmlToMap(xmlData);
             // 平台订单号
            String platformOrderNumber =  resultMap.get("out_trade_no");
            // 实际支付金额
            BigDecimal paymentAmount = new BigDecimal(resultMap.get("cash_fee"));
            // 微信订单号
            String transactionId =  resultMap.get("transaction_id");
            // 支付完成时间
            String timeEnd =  resultMap.get("timeEnd");
            ....
        }
    
    
    展开全文
  • 微信支付JSAPI--公众号支付,NATIVE扫码支付、跨公众号授权、支付相关代码工具类。内容比较乱,需要好好看
  • 微信支付JSAPI下单和微信小程序调起支付(V2版本)。 一、前文; 二、流程图; 三、SpringBoot接口实现; 2.1 微信调起支付所需数据; 2.2 下单接口; 2.3 支付回调接口; 三、微信小程序实现; 3.1 JSAP统一下单; ...
  • 在使用微信支付的接口,测试的时候一直提示“商户签名错误”,搜索了一下网上的解决方案,都不能解决。使用环境:1.统一下单文档:http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_12.支付API文档:...
  • 差不多两个月前的一个项目要使用微信线下支付本人并...好了,接下来看微信支付jsapi接口是怎么调用的步骤一:获取微信支付四大参数首先要想支持微信支付,必须拥有两个账号微信公众平台:账户公众APPID,APPSECEPT...
  • 要实现微信支付要满足几个条件: 一、有一个服务号,菜单栏里面有微信支付菜单的公众号 二、需要开通商户号
  • 来看微信支付jsapi接口是怎么调用的 步骤一:获取微信支付四大参数 首先要想支持微信支付,必须拥有两个账号 微信公众平台:账户 公众APPID,APPSECEPT ,微信商户平台商户ID, API密钥 步骤二:平台配置 1....
  • 微信支付JSAPI V3

    2021-11-11 10:08:17
    直接上干货:SDK请从官方下载 入口: ...// 组装字段,可见官方文档:微信支付-开发者文档 JSONObject data = new JSONObject(); data.put("appid", AuthUtil.APPID); data.put("mchid", Auth...
  • 微信支付 接入操作步骤 1。环境配置准备 1.1 微信公众号平台 开通微信支付功能 1.2 配置公众号对应产品的访问地址(一级域名) 并把文件放置服务器的根目录 1.3 微信支付平台 开通微信授权服务功能 设置api秘钥 ...
  • 微信支付JSAPI支付修改版本,可实例化,可操作,微信官网下载的sdk无法正常使用,已修改文档和相应的问题
  • 封装好的微信JSAPI支付接口 下载放到项目里就能用
  • 这个问题的出现是由于微信SDK中有点儿小问题。 timeStamp要求为字符串。 检查代码为long类型,转换下类型就好了。 找到example文件夹里面的WxPay.JsApiPay.php文件,定位到类GetJsApiParameters,大概在第66行...
  • 微信JSAPI支付DEMO PHP版,通俗易懂 包含支付配置文件 发起支付类文件 异步通知类文件 发起支付的HTMl文件等
  • java版微信jsapi支付 配置后可用 如有问题请添加, 这个分有点高。
  • C# .NETMVC 微信JSAPI支付

    2020-08-28 11:07:36
    C#.NET MVC JSapi微信支付,里面包含页面和控制器的简单代码和示例,结合我上一篇博客来参考的,上一篇博客连接是https://blog.csdn.net/weixin_44486443/article/details/108246514
  • 微信支付V3版系列课程详细讲解微信支付JSAPI支付、H5支付、Native支付、申请退款、支付结果通知、退款结果通知、申请交易账单、申请资金账单、下载账单、关闭订单。 提供java版、c#版、python3版、php版课程。 ...
  • 首先,微信支付需要通过一个微信特定的链接来获取到用户的code,再通过code获取到openid(openid是后面需要传入的参数);先看一下跳转获取code的代码。(获取code需要在公众号配置授权地址) @RequestMapping(...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,463
精华内容 3,385
关键字:

微信支付jsapi