微信支付-APP支付

微信支付第三弹--SpringBoot整合微信APP支付 吐槽 做完APP微信支付,就两个字:心累,并不是这个功能有多难,就是想吐槽一下微信,太TMD的店大欺客了!签名,呵呵,参数顺序都得按照他们的排序。。。。。。。。 吐槽归吐槽,还是做一下知识复盘,下面是做APP微信支付步骤和代码,框架用的是SpringBoot 步骤 必备参数: ①:appid:微信开放平台上面的应用appid,和公众号appid不同 ②:mch_id:商户ID,... 阅读详情

1. 登陆商户平台 查看APPID , https://pay.weixin.qq.com

在产品中心->我的产品 中查看当前商户开的支付类型。

 然后在appID授权里边查看APPID。

然后在  产品中心>api安全  中设置API密钥

微信APP支付接口文档    https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/10/20
 * Time: 18:48
 */

namespace app\v1\controller;
use app\common\controller\Checking;
use think\console\Command;
use think\Controller;
use think\Db;

class WechatPay extends Controller
{
    protected $values;
    const APPID='';
    const MCHID='';
    const KEY='tv0ov06vgvavh1ml5enx9dgocetsvbyg';//自己设置的微信商家key

    public function wx_apppay(){
        $data=Db::name('account_recharge_orders')->where(['pay_order_num'=>$_GET['orderId']])->find();
//        $data['pay_order_num']=time();
        $notify_url = "http://api.chachuanqi.cn/v1/pay/wechatNotify"; //回调地址
        $out_trade_no=$data['pay_order_num'];
        $nonce_str=MD5($out_trade_no);//随机字符串
        $userip =$this->get_client_ip();
        $appid = self::APPID;//微信
        $mch_id = self::MCHID;//微信官方的
//        $key = self::KEY;//自己设置的微信商家key
        $setAttr = [
            'body' => '充值',
            'appid' => $appid,
            'out_trade_no' => $data['pay_order_num'],
            'total_fee' => $data['money']*100,
            'notify_url' => $notify_url,
            'mch_id' => $mch_id,
            'spbill_create_ip' => $userip,
            'nonce_str' => $nonce_str,
            'trade_type' => 'APP'
        ];
        $this->values = $setAttr;   //配置赋给values属性
        $sign = $this->MakeSign();  //获取签名
        $this->values['sign'] = $sign;
        $xmlstr = $this->ToXml();   //生成微信请求xml数据格式
        $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";    //请求url参数
        $dataxml = self::postXmlCurl( $xmlstr, $url );//传参调用curl请求
        $objectxml = $this->xmlToArray( $dataxml );
        if ( $objectxml['return_code'] == 'FAIL' && $objectxml['result_code'] == 'FAIL' ) {
            Checking::response( -200, '获取签名失败' );
        } else {
            $time = time();
            //如果上一次请求成功,那么我们将返回的数据重新拼装,进行第二次签名
            $resignData = array(
                'appid' => $appid,
                'noncestr' => $setAttr['nonce_str'],
                'package' => 'Sign=WXPay',
                'partnerid' => $mch_id,
                'prepayid' => $objectxml['prepay_id'],
                'timestamp' => "$time"
            );
            $this->values = $resignData;
            $secondSign = $this->MakeSign( $resignData );
            $this->values['sign'] = $secondSign;
//            $this->values['notify_url'] = $notify_url;
            Checking::response( 200, 'ok', $this->values );
        }
    }

    /**
     * 获取客户端ip
     * @return string
     */
    public function get_client_ip() {
        if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
            $ip = getenv('HTTP_CLIENT_IP');
        } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
            $ip = getenv('HTTP_X_FORWARDED_FOR');
        } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
            $ip = getenv('REMOTE_ADDR');
        } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
    }
    /**
     * 订单查询
     *
     */
    public function orderQuery( $out_trade_no = '' )
    {
        $config = [
            'out_trade_no' => $out_trade_no,
            'appid' => self::APPID,
            'mch_id' => self::MCHID,
            'nonce_str' => self::getNonceStr()
        ];
        $this->values = $config;
        $sign = $this->MakeSign();      //生成sign签名
        $this->values['sign'] = $sign;
        $xmlstr = $this->ToXml();   //生成微信请求xml数据格式
        $url = "https://api.mch.weixin.qq.com/pay/orderquery";  //查询订单url
        $dataxml = self::postXmlCurl( $xmlstr, $url, false );//传参调用curl请求
        $objectxml = $this->xmlToArray( $dataxml );
        if ( $objectxml['return_code'] == 'SUCCESS' && $objectxml['result_code'] == 'SUCCESS' && $objectxml['trade_state'] == 'SUCCESS' ) {
            return true;
        } else {
            return false;
        }
    }
    /**
     *  作用:将xml转为array
     */
    public function xmlToArray( $xml )
    {
        //将XML转为array
        $array_data = json_decode( json_encode( simplexml_load_string( $xml, 'SimpleXMLElement', LIBXML_NOCDATA ) ), true );
        return $array_data;
    }
    /**
     * 以post方式提交xml到对应的接口url
     *
     * @param string $xml 需要post的xml数据
     * @param string $url url
     * @param bool $useCert 是否需要证书,默认不需要
     * @param int $second url执行超时时间,默认30s
     * @throws WxPayException
     */
    private static function postXmlCurl( $xml, $url, $useCert = false, $second = 30 )
    {
        $ch = curl_init();
        //设置超时
        curl_setopt( $ch, CURLOPT_TIMEOUT, $second );

        curl_setopt( $ch, CURLOPT_URL, $url );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, TRUE );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );//严格校验
        //设置header
        curl_setopt( $ch, CURLOPT_HEADER, FALSE );
        //要求结果为字符串且输出到屏幕上
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );

        if ( $useCert == true ) {
            //设置证书
            //使用证书:cert 与 key 分别属于两个.pem文件
            curl_setopt( $ch, CURLOPT_SSLCERTTYPE, 'PEM' );
            curl_setopt( $ch, CURLOPT_SSLCERT, self::SSLCERT_PATH );
            curl_setopt( $ch, CURLOPT_SSLKEYTYPE, 'PEM' );
            curl_setopt( $ch, CURLOPT_SSLKEY, self::SSLKEY_PATH );
        }
        //post提交方式
        curl_setopt( $ch, CURLOPT_POST, TRUE );
        curl_setopt( $ch, CURLOPT_POSTFIELDS, $xml );
        //运行curl
        $data = curl_exec( $ch );
        //返回结果
        if ( $data ) {
            curl_close( $ch );
            return $data;
        } else {
            $error = curl_errno( $ch );
            curl_close( $ch );
            throw new \Exception( "curl出错,错误码:$error" );
        }
    }
    /**
     * 输出xml字符
     **/
    public function ToXml()
    {
        if ( !is_array( $this->values )
            || count( $this->values ) <= 0 ) {
            throw new Exception( '数组异常', 1 );
        }

        $xml = "<xml>";
        foreach ( $this->values as $key => $val ) {
            if ( is_numeric( $val ) ) {
                $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
            } else {
                $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
            }
        }
        $xml .= "</xml>";
        return $xml;
    }
    /**
     *
     * 产生随机字符串,不长于32位
     * @param int $length
     * @return 产生的随机字符串
     */
    public static function getNonceStr( $length = 32 )
    {
        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
        $str = "";
        for ( $i = 0; $i < $length; $i++ ) {
            $str .= substr( $chars, mt_rand( 0, strlen( $chars ) - 1 ), 1 );
        }
        return $str;
    }
    /**
     * 生成签名
     * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值
     */
    protected function MakeSign(){
        //签名步骤一:按字典序排序参数
        ksort( $this->values );
        $string = $this->ToUrlParams( ksort( $this->values ) );
        //签名步骤二:在string后加入KEY
        $string = $string . "&key=" . self::KEY;
        //签名步骤三:MD5加密
        $string = md5( $string );
        //签名步骤四:所有字符转为大写
        $result = strtoupper( $string );
        return $result;
    }

    /**
     * 格式化参数格式化成url参数
     */
    public function ToUrlParams()
    {
        $buff = "";
        foreach ( $this->values as $k => $v ) {
            if ( $k != "sign" && $v != "" && !is_array( $v ) ) {
                $buff .= $k . "=" . $v . "&";
            }
        }

        $buff = trim( $buff, "&" );
        return $buff;
    }
}

客户确认商品点击支付—>后台提供前端调用的加签接口---->前端拿到后台加签的参数调起支付-->微信支付--->微信回调后台提供的回调接口   

这样微信支付就完成了,总体看起来,后台只需要做两件事

      1.给前端提供接口把订单进行加签在返还给前端

      2.给微信提供回调接口确认支付信息。

 

到此支付验签成功,然后结束回调数据

/**
     * 微信回调
     */
    public function wechatNotify()
    {

        Checking::writeLog('回调开始','回调','wx_cz.txt');
        $xml = file_get_contents('php://input');
        $arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        //用户http_build_query()将数据转成URL键值对形式
        $sign = http_build_query($arr);
        //md5处理
        $sign = md5($sign);
        //转大写
        $sign = strtoupper($sign);
        Checking::writeLog(json_encode($arr),'回调开始','wx_cz.txt');
        //验签名。默认支持MD5
        Checking::writeLog('开始验签','开始验签','wx_cz.txt');
//        if ( $sign === $arr['sign']) {
            //校验返回的订单金额是否与商户侧的订单金额一致。修改订单表中的支付状态。
            //逻辑
            Checking::writeLog('开始验签','验签成功'.$arr['return_code'],'wx_cz.txt');
//          $arr=json_decode();
            if ( $arr['return_code'] == 'SUCCESS' ) {
                $orderCode = htmlspecialchars( $arr['out_trade_no'] );
                $money = htmlspecialchars( $arr['total_fee'] );   //微信回调过来的支付金额
                $where = [
                    'pay_order_num' => $orderCode,
                    'status' => '1'
                ];
                Checking::writeLog($orderCode.'>>'.'','查询订单','wx_cz.txt');
                $info = Db::name('account_recharge_orders')->where( $where )->find();
                if (!empty($info)){
                    Db::startTrans();
                    try{
                        #处理逻辑
                        
                        
                        $return = ['return_code'=>'SUCCESS','return_msg'=>'OK'];
                        $xml = '<xml>';
                        foreach($return as $k=>$v){
                            $xml.='<'.$k.'><![CDATA['.$v.']]></'.$k.'>';
                        }
                        $xml.='</xml>';
                        echo $xml;
                    }catch (Exception $exception){
                        Db::rollback();
                        Checking::writeLog($exception->getMessage(),'程序出错','wx_cz.txt');
                        echo $exception->getMessage();
                    }
                }
            } else {
                echo 'fail';
            }
//        }


    }

 

uni-app app平台微信支付 一、App平台支付流程 流程:支付平台功能申请 -> manifest.json 里配置支付参数 -> uni-app 里调用 API 进行支付 二、微信App支付功能申请 到 微信开放平台 申请移动应用并开通支付功能,申请应用后可以获取 AppID 和 AppSecret 值 应用接入 微信商户平台,选择 App 支付 开通支付功能后可获取支付业务服务器配置数据:PARTNER(财付通商户号)、PARTNER_KEY(财付通密钥)、PAYSIGNKEY(支付签名密钥) 需要将从微信开放平台申 阅读详情

相关推荐

JAVA-APP微信支付流程

支付流程: 用户在APP中选择商品,点击购买 移动端调用后台,生成商品订单,并返回订单信息。用户端展示订单信息 用户点击支付,选择微信支付 移动端调用后台,后台生成支付订单,后台调用微信支付统一下单接口【统一下单API】 统一下单接口会返回prepay_id,再按签名规范重新生成签名后,将数据传输给移动端。参与签名的字段名为appid,partnerid,prepayid,nonce...

ZuHaiDong的博客 1420

微信支付文档

请求参数包括`body`(商品描述)、`out_trade_no`(商户订单号)、`total_fee`(订单金额,单位为分)、`spbill_create_ip`(用户终端IP)等。微信支付的接入需要根据具体的支付场景(如扫码支付、H5支付、JSAPI支付、小程序支付等)选择不同的接入方式。- 签名的关键参数包括`appid`(公众号/小程序ID)、`mch_id`(商户号)、`nonce_str`(随机字符串)等。- 与JSAPI支付类似,需要先获取用户`openid`,然后发起支付。

weixin_43914035的博客 1939

关于实现uni-app项目在APP端使用微信支付功能

首先在对项目开启支付功能,在项目的manifest.json文件中勾选APP模块配置中的Payment支付模块,并将需要的信息填写完整,如下图 除此之外还需要其他的一些配置,下面开结合图片来一步步的详细了解下: 如上图提交云端打包界面所示,相对于支付宝微信在各方面的要求比较全面,对项目要使用微信支付必须严格按照微信官方的要求来配置,如上面图片所示:必须使用自有证书,证书别名,证书私钥密码和证书文件缺一不可,有关证书的制作过程可参考官方教程如何生成证书,其中关于签名部分: 生成的签名就是一串字符串,记住

bigpatten的博客 8146

实战APP微信支付服务商模式(一个APP多个商户收款)

引入Maven: <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>0.0.3</version> </dependency> 微信配置类: package co..

GuiSu97的博客 1万+

在iOS APP发起H5微信支付

场景介绍 H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。 主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。 提醒:H5支付不建议在APP端使用,如需要在APP中使用微信支付,请接APP支付。 这个场景介绍来自微信H5支付的开发文档,说建议不要在APP端使用H5支付,但是

Urnotlmm的专栏 1万+

Android App支付系列(一):微信支付接入详细指南(附官方支付demo)

一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统显然是不明智的,国内已经有多家成熟的移动支付提供商,腾讯就是其中之一。梳理了下微信支付的接入,今天给大家分享下腾讯旗下的微信支付SDK的接入流程

MichaelX的专栏 7万+

微信支付接口

微信支付。

hnhroot的博客 1万+

vue支付项目-APP微信支付功能

商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。优快云前端领域优质创作者,资深前端开发工程师,专注前端开发,在优快云总结工作中遇到的问题或者问题解决方法以及对新技术的分享,欢迎咨询交流,共同学习。),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;2.判断支付方式,如果是1,则是微信支付方式。1.判断是否在微信内支付,需要在微信外支付。

总结前端开发中遇到的问题,分享前端知识 6445

微信支付开发文档

产品介绍官网路径:https://pay.weixin.qq.com/static/product/product_intro.shtml?

weixin_43472934的博客 1182

压电陶瓷传感器避坑指南:实测阻抗匹配对信号输出的影响(附示波器调试技巧)

本文深入探讨压电陶瓷传感器在工业振动监测中的阻抗匹配问题,通过等效电路模型和实测数据揭示负载阻抗对信号输出的关键影响。文章提供从元件选型到示波器调试的完整解决方案,特别强调100kΩ以上负载阻抗的重要性,并分享JFET缓冲器设计和PCB布局的实用技巧,帮助工程师避免信号失真和输出不稳定问题。

ooo22的博客 516

Python解析骑行fit文件:从数据缺失到完整记录

本文详细介绍了如何利用Python解析和处理骑行FIT文件,解决数据缺失问题。通过使用fitparse库读取二进制FIT文件,并结合Garmin FitCSVTool进行格式转换,指导读者一步步诊断数据完整性、设计心率修补方案,并最终生成完整的骑行记录文件。该方法为骑行爱好者提供了灵活的数据修复与自定义分析能力。

weixin_29062255的博客 456

APP微信支付的后台实现

参阅微信支付文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5 这一部分说的已经很详细了; 1.app将订单信息传给自己的后台服务; 2.后台服务接受到订单信息后,构建预支付信息,回传给APP; 接下来的过程是: 3.app获取预支付信息。调起微信支付,完成支付; 4.微信同步返回,接收通知给APP;异

u010235716的博客 1万+

C# emgu.cv图像识别 从大图中寻找小图,判断存在图的相似度

这是2个问题,我采用emgu.cv来解决这个识别问题,这里需要在nuget中引用emgu。最近写了一个在一张图片中,截取一部分,通过机器判断截取图片是这张图片的。第一、通过小图去找判断是否存在大图中,第二、小图存在大图的什么位置。

一个专注于技术研究创新的程序员 2467

全网最详细的uniapp微信支付教程,包含APP微信支付、微信内置浏览器支付、微信外h5支付

一、APP微信支付 1、微信支付之前就要生成自己的订单了,也就是存在自己服务器的订单。 //每个人的请求方式封装不一样,可忽略this.$u.api... this.$u.api.submitOrder({ good_name: _that.bjInfo.name, good_id: _that.bjInfo.id, user_id: _that.userId, address_id: _that.addressInfo.id, total: _that.bjInfo

程序员张礼奎的博客 1万+

Ubuntu 22.04 安装 PostgreSQL + AGE + pgvector 完全指南

本教程详细介绍了在Ubuntu 22.04服务器上安装PostgreSQL数据库,并为其添加AGE图数据库扩展和pgvector向量搜索扩展的步骤。首先,更新系统并安装PostgreSQL,然后通过源码构建并安装AGE和pgvector扩展。接着,配置PostgreSQL以使用这些扩展,并可选地允许远程连接。教程还包括创建用户、设置密码、验证安装以及安装后的优化建议。最后,提供了常见问题的解决方法。通过本教程,用户可以在同一数据库中处理关系型数据、图数据和向量数据,为现代应用程序提供强大的数据支持。

这个是个人博客,记录生活中的一些日常。 1742

DeepSeek+知网研学:三步搞定文献矩阵与对比分析(实战指南)

本文提供了一套高效实用的文献管理分析实战指南,详细介绍了如何结合DeepSeek大模型与知网研学平台,通过三个核心步骤快速完成文献梳理。该方法能自动提炼文献核心要素、生成结构化对比矩阵,并辅助发现研究空白,显著提升学术研究者的文献分析效率与深度。

weixin_29061509的博客 489

PHP开发APP微信支付接口

PHP开发APP微信支付接口 转载 : 这段时间在给一个iOS应用程序开发一个微信支付接口,之前并没有接触过微信支付,翻阅了一上午的微信开发文档,对其流程做了大致的了解后,便开始着手该接口程序的编写。 编写的过程中也遇到了各种各样的问题,各方查找资料,终于完成了该接口的开发。想到以后小伙伴们肯能会用的到,因此,我将整个接口的开发流程分享给大家。 【准备工作】 在准备着手开发之前呢...

BlueSky 1万+

STM32开发 -- 4G模块开发详解(1)

这部分一直再看,资料都已经整理好了,但是一直没有汇总。接下来就详细的看一下,GSM这部分是怎么实现的。

不积跬步,无以至千里 5万+

uni-app h5调用微信支付方法

uni-app h5调用微信支付方法 首先微信支付的形式要好多种如需可查看https://pay.weixin.qq.com/wiki/doc/api/index.html,这里主要用的是JSAPI的支付形式。 想要公众号、h5页面直接调起微信支付窗口实现支付形式,首先必须是微信浏览器或微信环境下才可以直接调起。也就是我们的链接要是https的,下面是我支付的整个流程: 思路:1.首先我们要先获取openid,如何获取openid,可通过从url中获取code,再返回给后台处理来获取openid 2.获取o

weixin_41262185的博客 2万+

uniapp - 解决App端(安卓/苹果)使用uni.openlocation跳转第三方高德地图白屏问题,安卓苹果ios平台使用应用内置地图查看位置打不开,打包后App高德地图页面白屏不显示的问题!

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,高德地图白屏,uniapp调用内置高德地图白屏,uniApp使用uni.openlocation空白不显示地图,uniappapp端如何解决openlocation地图不显示问题,打开第三方地图显示位置地图没反应,uni.openlocation跳转第三方高德地图,APP端白屏问题,使用uni.openlocation跳转到第三方导航软件的时候,app端跳转的是高德地图,但是白屏没有反应,打包发布后白

🏆 前端领域优质创作者 1万+

超声波传感器(CH101&ch201) - Ⅰ

压电微机械超声换能器(PMUT)和超声波信号处理的可编程片上系统(SoC)集成在一起的传感器

nicole088的专栏 2795

uni-app微信支付功能实现

本文详细介绍了在uni-app框架下实现微信支付功能的流程,以缴纳系统为例,涵盖了从选择支付项目到更新支付状态的完整步骤。首先,用户通过Vant UI的Checkbox组件选择待支付项目,系统自动计算总金额。接着,用户点击“立即结算”按钮,系统调用后端接口创建支付订单。订单创建成功后,使用uni-app的uni.requestPayment方法调用微信支付接口,并处理支付结果。支付完成后,通过弹窗展示支付结果,并更新支付状态。文章还强调了支付功能的安全性考虑,如前端不计算签名、使用HTTPS、支付结果验证等

qq_43557848的博客 6389

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android App整合微信支付

首先根据教程操作:微信APP支付接入商户服务中心 然后查看 微信 APP 支付 Android 开发文档

Errol's Blog 1657

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【APP支付】关于APP微信支付那些事

关于支付这一块,在没有接触之前,感觉还是很神奇的,以为会很麻烦,在同事写了一半的代码上,参考微信API支付文档,一天就搞定了。 在这之前,第一次接触支付的时候,以为只能用服务器测支付的,但是发现调试很麻烦,还要看服务器上的tomcat的打印信息,这次的测试服务器还有点问题,tomcat一直打印一些刷新xml文件的错误信息,但是不影响项目的正常使用。这就很尴尬了,写好了,没法测了都。。。。 在向同事...

种一棵树最好的时间是十年前,其次是现在。 813

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

APP没有上架应用市场,微信支付商户怎么开通APP支付

微信支付商户APP支付可以快速开通了,不用上架到应用市场就能快速开通,这个方法去学会了吗!

m0_66844422的博客 3168
上一篇: usdt (节点自动归集)
下一篇: php 微信native扫码支付
梦夏夜
博客等级 码龄10年 532粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦夏夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值