精华内容
下载资源
问答
  • // 1.6.3以上模板组件写法 passInput(e){ console.log(this.sixpass.data.allinput); if(this.sixpass.data.allinput.length>=6){ console.log('已经完成'+this.sixpass.data.allinput) }else{ console.log('...

    先看看效果


    Html代码

    <view class="payPass_box1" wx:if="{{allinputF1}}">
    	<view class="qiueBtn" bindtap="hideBox">关闭</view>
    	<view class="payPass_box_t">请输入您的支付密码</view>
    	<view class="payPass_box_m">
    		<view class="payPass_box_m_in" bindtap="focusInput">
    			<view class="payPass_box_m_in_in" wx:for="{{6}}" wx:key="{{index}}">
    				<input data-index="{{index}}" bindinput="allInputBtn" type="number" confirm-hold="true" value="{{inputArr[index]}}" disabled="true" maxlength="1" password="{{true}}"/>
    			</view>
    		</view>
    		<view class="indexTopInput">
    			<input value="{{inputStr}}" focus="{{allinputF1}}" maxlength="6" type="number" bindinput="passInput"/>
    		</view>
    	</view>
    </view>

    Css代码

    .payPass_box1{
    	font-size: 26rpx;
    	color: #333;
    	width: 640rpx;
    	text-align: center;
    	margin-top: 40rpx;
    	height:400rpx;
    	position: fixed;
    	left: 50%;
    	top: 30%;
    	transform: translate(-50%,-50%);
    	border: 2rpx #d1d1d1 solid;
    	background: #fff;
    	opacity: .9;
    }
    .payPass_box_t{
    	margin-top: 100rpx;
    }
    .payPass_box_m{
    	margin-top: 80rpx;
    	width: 100%;
    	display: flex;
    	align-items: center;
    	justify-content: center;
    	position: relative;
    }
    .payPass_box_m_in{
    	display: flex;
    	align-items: center;
    	justify-content: center;
    	position: relative;
    	z-index: 10;
    }
    .payPass_box_m_in_in{
    	width: 70rpx;
    	height: 70rpx;
    	border:4rpx #bfbfbf solid;
    	display: flex;
    	justify-content: center;
    	align-items: center;
    	margin-right:8rpx; 
    }
    .indexTopInput{
    	position: absolute;
    	height: 100%;
    	background: #000;
    	opacity: 0.5;
    	z-index: 2;
    	left: 0rpx;
    	background: red;
    	left: -150%;
    }
    .indexTopInput input{
    	width: 100%;
    	height: 100%;
    }
    .qiueBtn{
    	position: absolute;
    	right: 20rpx;
    	top: 10rpx;
    	width: 80rpx;
    	height: 60rpx;
    	text-align: right;
    	color: #999
    }

    组件的js代码        

    // components/sixpass/sixpass.js
    var http = require('../../utils/http.js');
    Component({
      /**
       * 组件的属性列表
       */
      properties: {
    
      },
    
      /**
       * 组件的初始数据
       */
      data: {
        allinputF1:true,
        inputArr:[],
        inputStr:'',
        focusF:[],
        allinput:'',
      },
    
      /**
       * 组件的方法列表
       */
      methods: {
        passInput(e){
          var that = this;
          var value = e.detail.value;
          var num = e.detail.cursor-1;
          this.triggerEvent("passInput")
          var inputArr = [];
          for(let i=0;i<=num;i++){
            inputArr.push(value.substring(i,i+1))
          }
          if(inputArr.length>=6){
            that.setData({
              inputSrr:value,
              inputArr:inputArr,
              allinput:value,
            })
            console.log('密码输入完成 '+inputArr)
          }else{
            that.setData({
              inputSrr:value,
              inputArr:inputArr,
              allinput:''
            })
          }
        },
        allInputBtn(e){
          var that = this;
          var index = e.target.dataset.index;
          var focusF = http.forC(that.data.focusF);
          var inputArr = that.data.inputArr;
          var value = e.detail.value
          if(inputArr[index]){
            inputArr[index] = '';
            focusF[index] = '1';
          }else{
            inputArr[index] = value;
            focusF[index+1] = '1';
          }
          that.setData({focusF:focusF,inputArr:inputArr})
        },
        // 点击关闭密码框
        hideBox(){
          this.setData({allinputF1:false})
        },
        show(){
          this.setData({allinputF1:true})
        },
        focusInput(){
          console.log(this.data.inputStr)
          this.setData({allinputF1:true})
        },
      }
    })

    json代码

    {
      "component": true,
      "usingComponents": {}
    }

    在需要的地方引入组件

    {
    	"usingComponents": {
    	    "sixpass": "/components/sixpass/sixpass"
    	  },
    	 "navigationBarTitleText": "钱包-提现"
    }

    这样就是引入成功了

    然后开始在页面调用sixpass这个六位密码的组件

    <sixpass id="sixpass" bind:passInput="passInput"></sixpass>

    页面js的引用

    // 1.6.3以上模板组件写法
      passInput(e){
        console.log(this.sixpass.data.allinput);
        if(this.sixpass.data.allinput.length>=6){
          console.log('已经完成'+this.sixpass.data.allinput)
        }else{
          console.log('还差点 '+this.sixpass.data.allinput)
        }
      },

    值得注意的是小程序1.6.3以上才支持模板的写法,需要低版本兼容的这个就不好用了所以也可以用模板写法来实现就是用的时候少写一遍CSS与HTML

    模板的HTML

    <!-- 六位密码模版 -->
    <template name="passBox">
        <view class="payPass_box1" wx:if="{{passObj.allinputF1}}">
            <view class="qiueBtn" bindtap="hideBox">关闭</view>
            <view class="payPass_box_t">请输入您的支付密码</view>
            <view class="payPass_box_m">
                <view class="payPass_box_m_in" bindtap="focusInput">
                    <view class="payPass_box_m_in_in" wx:for="{{6}}" wx:key="{{index}}">
                        <input data-index="{{index}}" bindinput="allInputBtn" type="number" confirm-hold="{{true}}" value="{{passObj.inputArr[index]}}" disabled="{{true}}" maxlength="1" password="{{true}}"/>
                    </view>
                </view>
                <view class="indexTopInput">
                    <input value="{{passObj.inputStr}}" focus="{{passObj.allinputF1}}" maxlength="6" type="number" bindinput="passInput"/>
                </view>
            </view>
        </view>
    </template>

    模板的Css

    /*密码*/
    .payPass_box1{
        font-size: 26rpx;
        color: #333;
        width: 640rpx;
        text-align: center;
        margin-top: 40rpx;
        height:400rpx;
        position: fixed;
        left: 50%;
        top: 30%;
        transform: translate(-50%,-50%);
        border: 2rpx #d1d1d1 solid;
        background: #fff;
        opacity: .9;
    }
    .payPass_box_t{
        margin-top: 100rpx;
    }
    .payPass_box_m{
        margin-top: 80rpx;
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        position: relative;
    }
    .payPass_box_m_in{
        display: flex;
        align-items: center;
        justify-content: center;
        position: relative;
        z-index: 10;
    }
    .payPass_box_m_in_in{
        width: 70rpx;
        height: 70rpx;
        border:4rpx #bfbfbf solid;
        display: flex;
        justify-content: center;
        align-items: center;
        margin-right:8rpx; 
    }
    .indexTopInput{
        position: absolute;
        height: 100%;
        background: #000;
        opacity: 0.5;
        z-index: 2;
        left: 0rpx;
        background: red;
        left: -150%;
    }
    .indexTopInput input{
        width: 100%;
        height: 100%;
    }
    .qiueBtn{
        position: absolute;
        right: 20rpx;
        top: 10rpx;
        width: 80rpx;
        height: 60rpx;
        text-align: right;
        color: #999
    }

    模板写法的js

    传入data数据

    passObj:{
          focusF:['1'] //第一个焦点获取,
          inputArr:[]//六位密码的数组,
          inputStr:""//六位密码,
          allinputF1:false//是否显示当前的六位密码框,

        },

    下面的 JS思路写法与组件一致就不在CTRL+C=>V了,各位大佬应该都看得懂。

    感谢各位有闲情看完此篇博客,不足之处还望指点~!



    展开全文
  • 目录 零之前言 一.注册支付宝开放平台账号 ... 2.创建公私秘钥 ...2.项目中添加公私密钥 ...二....5.面对面扫(真二维码支付) ...三....3.模板文件 ...网上虽然有很多的Django接入支付宝付款,但是很少看到有面...

    目录

    一.注册支付宝开放平台账号

    1.注册

    2.创建公私秘钥

    2.项目中添加公私密钥

    二.生成二维码

    1.安装模块等

    2.模块的结构

    3.电脑支付

    4.手机支付

    5.面对面扫码(真二维码支付)

    三.小项目代码

    1.urls

    2.views

    3.模板文件

    4.访问效果


    零之前言

    网上虽然有很多的Django接入支付宝付款,但是很少看到有面对面扫码的支付宝教程,所以整合了一下。

    主要使用到的模块Python-Alipay-SDK的样例等信息:https://github.com/fzlee/alipay/blob/master/README.zh-hans.md

    注意此SDK非官方SDK

    一.注册支付宝开放平台账号

    因为这一步我已经注册过了,所以过程可能不会非常详细。

    1.注册

    这过程可能不会太详细,如果看我的不明白,还是找一找其他大佬的文章吧QAQ

    在支付宝开放平台的开发者中心控制台里注册“研发服务”(开通沙箱功能),你可以把沙箱理解成一个独立的支付宝,使用独立的网关、账号。我们只需要在这上面调试通后,稍微改改配置,就可以上线了!

     

    2.创建公私秘钥

    下载我们的 "支付宝开放平台开发助手"https://opensupport.alipay.com/support/knowledge/20069/201602111105?ant_source=zsearch

    创建我们的密钥

    然后我们把我们的公钥复制到我们的沙箱应用里:

    创建好就是这个亚子:

    2.项目中添加公私密钥

    我们在项目里创建一个文件夹吧,且创两个文本文件来存放我们的密钥吧,当然它是有格式的

    支付宝公钥/私钥格式:

    -----BEGIN PUBLIC KEY-----
    中间放公钥(刚才在网页生成的下面的那个)
    -----END PUBLIC KEY-----
    -----BEGIN RSA2 PRIVATE KEY-----
    这里放私钥(刚才用软件生成的那个)
    -----END RSA2 PRIVATE KEY-----
    

    然后在Django中写代码读入我们的密钥文件:我是写在了Django中的settings里:

    APP_PRIVATE_KEY = open(os.path.join(BASE_DIR, 'Alipay/ali_private_key.pem'),'r').read()
    APP_PUBLIC_KEY = open(os.path.join(BASE_DIR, 'Alipay/ali_public_key.pem'),'r').read()

    然后我的结构就像这样

    当然,创建文件这一步你可以省略,直接让这两个值 = 我们的公私钥文本。看个人习惯吧

    二.生成二维码

    1.安装模块等

    重申这是非官方SDK

    安装模块:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-alipay-sdk

    项目地址:https://github.com/fzlee/alipay

    2.模块的结构

    模块的结构是:
    创建一个阿里客户端实例    ->    调用实例的函数(创建实例的时候基本上已经把我们要配置的东西配置好了)

    我们先来看看创建实例的例子吧,作者文档解释:

    alipay = AliPay(
        appid="", #这个是刚才你创建的时候保存的appid
        app_notify_url=None,  # 默认回调url
        app_private_key_string=app_private_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA2" # RSA 或者 RSA2
        debug=True  # 默认False
    )

    尤其要说一下我们的debug模式:在Pycharm中选中Alipay,ctrl+alt+b跳转去看看他的代码,网上找,找到和debug模式有关的:

            if debug is True:
                self._gateway = "https://openapi.alipaydev.com/gateway.do"
            else:
                self._gateway = "https://openapi.alipay.com/gateway.do"

    这有两个网关,这是什么意思呢?仔细对比支付宝的文档,我们就可以知道带dev的是沙箱模式的网关。所以我们Debug==True的时候用的是沙箱模式,我们先调试,等要发布的时候改成False就行了。注意此处设置错误,后面会出现奇怪的错误。

    3.电脑支付

    支付宝开发者文档:https://docs.open.alipay.com/270/105898/

    作者样例:

    # 如果你是Python 2用户(考虑考虑升级到Python 3吧),请确保非ascii的字符串为utf8编码:
    subject = u"测试订单".encode("utf8")
    # 如果你是 Python 3的用户,使用默认的字符串即可
    subject = "测试订单"
    
    # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no="20161112",
        total_amount=0.01,
        subject=subject,
        return_url="https://example.com",
        notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url
    )

    我的代码:

            order_string = alipay.api_alipay_trade_page_pay(
                out_trade_no=payid,  #交易单号
                total_amount=paysum, #共付金额
                subject=payname, #项目名称
                return_url="https://baidu.com", #支付成功后默认跳转的界面
                notify_url="http://your_web/app/callback_post/"  # 这个用于接收回调的POST信息,具体返回值可在官方API列表查询
            )
            return redirect("https://openapi.alipaydev.com/gateway.do?" + order_string) #这是沙箱链接

    访问结果:

    4.手机支付

    手机支付就是弹出一个手机网页,然后点击它后自动拉取支付宝应用

    支付宝开发者文档:https://docs.open.alipay.com/60/104790

    作者样例:(参数基本上同电脑支付)

    # 手机网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
    order_string = alipay.api_alipay_trade_wap_pay(
        out_trade_no="20161112",
        total_amount=0.01,
        subject=subject,
        return_url="https://example.com",
        notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url
    )

    我的代码:

            order_string = alipay.api_alipay_trade_page_pay(
                out_trade_no=payid,
                total_amount=paysum,
                subject=payname,
                return_url="https://example.com",
                notify_url="http://your_web/app/callback_post/"
            )
            return redirect("https://openapi.alipaydev.com/gateway.do?" + order_string)

    访问结果:

    如此小节开篇所示。

    5.面对面扫码(真二维码支付)

    支付宝开发者文档:https://docs.open.alipay.com/194/106078/

    作者样例:

    alipay = AliPay(appid="", ...)
    
    # create an order
    alipay.api_alipay_trade_precreate    (
        subject="test subject",
        out_trade_no="out_trade_no",
        total_amount=100
    )
    
    # check order status
    paid = False
    for i in range(10):
        # check every 3s, and 10 times in all
        print("now sleep 3s")
        time.sleep(3)
        result = alipay.api_alipay_trade_query(out_trade_no="out_trade_no")
        if result.get("trade_status", "") == "TRADE_SUCCESS":
            paid = True
            break
        print("not paid...")
    
    # order is not paid in 30s , cancel this order
    if paid is False:
        alipay.api_alipay_trade_cancel(out_trade_no=out_trade_no)

    我的代码:

    由于这个模型和前两个不一样,它是创建一个请求,然后返回一堆参数,至于用户是否真的支付了,我们需要再用循环然后使用一个API查询是否交易成功,我只写了生成二维码的代码:因为使用了生成二维码的部分代码,所以要用到qrcode和image两个包,而IO包python自带

    先下载包:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple qrcode
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple image
    #注意BytesIO()Pycharm是不能搜到的我们自己导入模块
    #from io import *
    data = alipay.api_alipay_trade_precreate(
                subject=payname,
                # 这个必须确保不同,所以我们需要加一些前缀才行
                out_trade_no="face" + payid,
                total_amount= int(paysum)
            )
            if data["code"] == "10000": #这个是API调用成功
                img = qrcode.make(data["qr_code"])
                buf = BytesIO()
                img.save(buf)
                image_stream = buf.getvalue()
                response = HttpResponse(image_stream, content_type="image/png")
                return response
            else:
                return HttpResponse("<a href=""/app/alipay"">创建失败,点此返回</a>")

    对于代码里的data的返回值,我们可以参考官方的API参考文档:https://docs.open.alipay.com/api_1/alipay.trade.create

    对于生成二维码的代码,自己百度其意思。

    访问结果:

    三.小项目代码

    真的很垃圾,别喷我,但是够看了。

    1.urls

    说明:通过访问/app/alipay来进行我们的支付选择,然后通过/app/pay_post/返回显示

        re_path(r"alipay/", views.alipay, name='alipay'),
        re_path(r"pay_post/", views.pay_post, name='pay_post'),
        re_path(r"callback_post/", views.repay_post, name='callback_post'),

    2.views

    def alipay(request):
        return render(request, 'creatalipay.html') #返回支付的界面
    
    def pay_post(request):
        payid = request.POST.get('payid')
        paysum = request.POST.get('paysum')
        payname = request.POST.get('payname')
        payway = request.POST.get('payway')
        alipay = AliPay(
            appid="your appid",
            app_notify_url=None,
            app_private_key_string=APP_PRIVATE_KEY,
            alipay_public_key_string=APP_PUBLIC_KEY,
            sign_type="RSA2",
        debug = True  # True就是沙箱环境 False就是正式环境
        )
        if payway == "phone":
            order_string = alipay.api_alipay_trade_wap_pay(
                out_trade_no=payid,
                total_amount=paysum,
                subject=payname,
                return_url="https://example.com",
                notify_url="http://your web/app/callback_post/"
            )
            return redirect("https://openapi.alipaydev.com/gateway.do?" + order_string)
        elif payway == "pc":
            order_string = alipay.api_alipay_trade_page_pay(
                out_trade_no=payid,
                total_amount=paysum,
                subject=payname,
                return_url="https://example.com",
                notify_url="http://your web/app/callback_post/"
            )
            return redirect("https://openapi.alipaydev.com/gateway.do?" + order_string)
        elif payway == "face":
            data = alipay.api_alipay_trade_precreate(
                subject=payname,
                out_trade_no="face" + payid,
                total_amount= int(paysum)
            )
            if data["code"] == "10000":
                img = qrcode.make(data["qr_code"])
                buf = BytesIO()
                img.save(buf)
                image_stream = buf.getvalue()
                response = HttpResponse(image_stream, content_type="image/png")
                return response
            else:
                return HttpResponse("<a href=""/app/alipay"">创建失败,点此返回</a>")
        else:
            return HttpResponse("<a href=""/app/alipay"">创建失败,点此返回</a>")
    
    def repay_post(request): #这只是一个简单的验证
        data = request.POST.get('total_amount')
        print("成功支付" + data)
        return HttpResponse("1")

    3.模板文件

    creatalipay.html

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <title>创建订单</title>
    </head>
    <body>
    <div style ="text-align: center;">
        <form action="{% url 'app:pay_post' %}" method ="post">
            <span>订单号:</span> <input type="text" name ="payid">
            <br>
            <span>金  额:</span> <input type = "text" name ="paysum">
            <br>
            <span>项目名:</span> <input type = "text" name ="payname">
            <br>
            <select name ="payway">
                <option value="face">扫码</option>
                <option value="phone" >手机支付</option>
                <option value="pc">电脑支付</option>
            </select>
            <br>
            <button>提交</button>
        </form>
    </div>
    </body>
    </html>

    4.访问效果

    剩下的就和刚才演示的一模一样。

    展开全文
  • ADD YOUR TITLE HERE 第二章 01 02 03 单击此处可编辑内容根据您的需要自由...手机充值 下载APP 目录 个人付款 信用卡还款 密码修改 可通过两种方式进行APP载 1. 进入应用商店下载 如ios系统可进入App store搜索橙市生
  • 个人租房协议模板.doc

    2021-01-18 19:19:27
    个人租房协议模板 租房协议书是指房屋出租人将房屋提供给承租人使用,承租人定期给付约定租金,并于合同终止时将房屋完好地归还出租人的协议...付款方式:按 支付,另付押金 元,( 注意:租房终止,验收无误后,将押...
  • 赔偿协议书模板.doc

    2020-12-27 09:59:41
    赔偿协议书模板 第一篇:受伤赔偿协议书模板 甲方:xx公司 乙方:xxx(女,身份证号码:xxxxxxx) 于xx年xx月xx日在甲方经营的xx景点游玩时发生意外受伤事件,依据有关法律法规,双方本着平等协商、互谅互让的原则...
  • 进口合同模板.doc

    2021-01-18 17:07:00
    进口合同模板 买 方:____________ ________________ 电话:____________ 法定代表人:____________ 职务:________________ 国籍:____________ 卖 方:____________ ________________ 电话:____________ 法定...
  • 建房合同模板4篇.doc

    2021-01-18 11:32:47
    建房合同模板4篇 合作建房,就是住户联合做开发商,共同出资,成立房地产公司,大家按各自购买能力一起出资金,综合汇总户型并计算总面积,选购合适地块,找设计公司设计、找建筑公司施工,最后验收付款入住。...
  • 租房合同书模板通用 出来工作后相信不少小伙伴都会要租房,那么租房合同书要怎么填写?...付款方法:按口月 口季度 口半年 口年 付出,另付押金 元,租房停止,甲方检验无误后,将押金交还乙方,不计...
  • 三合一收款.zip

    2020-04-23 08:53:50
    简介:卡特三合一收款生成系统源码,和收款啦采用一样的原理 ...内部多达50多套模板,前端跟付款界面都特别好看 识别收款之后会自动加密,非常安全 一样没有后台,一样采用Layui前端框架都是开源!
  • 股份转让合同模板.doc

    2021-01-18 11:28:57
    股份转让合同模板 股份转让一般指公司股东将其所持有的公司的股份全部或部分转让给他人的法律行为。对股份转让合同你们有多少了解呢?以下是小编整理的股份转让合同,欢迎参考阅读。 股份转让合同范文一 甲方:_____...
  • 合作建房意向书模板 甲方: 通信 邮编: 联系电话: 乙方: 身份证号码: 通信 联系电话: 乙方经过了解,有意与甲方合资建设“ 吉祥湾花园”商住楼(下称“本项目”),经甲、乙双方协商,签定本《吉祥湾花园...
  • 房屋买卖合同模板大全 不知道房屋买卖合同怎么写?下面是小编为您精心整理的买卖合同范文,欢迎参考,希望对大家有所帮助! 房屋买卖合同1 卖方(以下简称甲方):姓名、身份证号码 买方(以下简称乙方):姓名、身份证...
  • 二手房购房定金合同模板大全 二手房是指个人在购买售房人具有房屋产权证、能在市场上流通交易的住房或商业用房时,自己支付一定比例首付款,其余部分以要购买的房产作为抵押,向合作机构申请的贷款,今天小编就给...
  • 借款居间服务合同模板 “居间合同是居间人向委托人报告订立合同的机会或者提供订立合同的媒介服务,委托人支付报酬的合同。对于借款居间服务合同你又了解多少呢?以下是小编整理的借款居间服务合同,欢迎参考阅读。...
  • 收款委托书【模板】 收款委托书怎么写?下面是小编为大家收集的关于个人还有公司的委托书范本,希望对大家有帮助! 个人收款委托书 ***公司 现委托下述受委托人在我单位与贵公司办理货款(合同号:***)结算事项中,...
  • 钢结构厂房制安合同模板 钢结构厂房是钢结构建筑物中最为普遍的一种建筑,对于钢结构厂房制安合同你还了解多少呢?以下是在小编为大家整理的钢结构厂房制安合同范文,感谢您的欣赏。钢结构厂房制安合同范文一 发包方...
  • 国际贸易合同书模板 合同号:_________ 买方:_________ 卖方:_________ _________(以下简称买方)为一方,与_________(以下简称卖方)为另一方,根据下列条款买方同意购买,卖方同意出售下列货物,于________...
  • 2019标准房屋租赁合同模板简单版 出租方(甲方): 承租方(乙方): 联系电话: 联系电话: 身份证号码: 身份证号码: 出租之物业座落于厦门市 ,共计 房 厅,室内设备及装饰包括 等。 合同签订之日的电表底数 ,...
  • 简单饭店承包合同范本模板大全 随着餐饮的发展,饭店承包经营日益普遍,那么签订饭店承包经营合同需要注意什么呢? 简单饭店承包合同范本1 承包方: 身份证号码: (以下简称乙方) 本承包协议根据中华人民共和国...
  • 瑞捷云邀请购买为开发者提供一站式支付解决方案。需简单的一键安装.几行代码高效实现网页、APP支付功能,并提供可靠稳定可靠的分布式云后端服务,保障支付流程安全流畅 瑞捷云邀请购买插件优势 1、支持邀请...
  • 微信支付——扫支付Native

    千次阅读 2019-12-19 19:32:16
    公众号appid,小程序appid均可用,付款后展示的通知消息模板不同,移动应用appid不可。 两种模式主要区别: 模式一:依赖微信商户平台配置的扫回调连接; 模式二:不依赖配置的扫回调连接,但是生成的支付...

    1.开通产品。(要实体店拍照)

    2.Native支付有两种模式,先介绍第二中模式。公众号appid,小程序appid均可用,付款后展示的通知消息模板不同,移动应用appid不可。

    两种模式主要区别:

    模式一:依赖微信商户平台配置的扫码回调连接;

    模式二:不依赖配置的扫码回调连接,但是生成的支付二维码有效期2小时,开发简单,两者业务流程有区别,模式二的二维码只能扫码付款一次;

    3.使用模式二开发。

    统一下单——获取到code_url——拼接连接生成二维码

    请求成功返回示例:

    {
    	"nonce_str": "8UvmcoZt8OsY5q9m",
    	"device_info": "S-001",
    	"code_url": "weixin://wxpay/bizpayurl?pr=31qxQZu",
    	"appid": "wxdfc5c46e8cee32ca",
    	"sign": "F89ECB58489849D2D6856273383BA1ED",
    	"trade_type": "NATIVE",
    	"return_msg": "OK",
    	"result_code": "SUCCESS",
    	"mch_id": "154571",
    	"return_code": "SUCCESS",
    	"prepay_id": "wx191750353877131886b964d71860975500"
    }

    	/**
    	 * 模式二,生成2h的二维码<br>
    	 * 只传递了必须参数
    	 * 2019年12月18日 下午1:34:21
    	 * @param openid
    	 * @param appType 1小程序  2APP  0公众号
    	 */
    	public static Map<String, String> getQRCodeURL(String outTradeNo,int total_fee,int appType) {
    		Map<String, String> resutlMap = null;
    		try {
    			MyWXPayConfig wxPayConfig = new MyWXPayConfig();
    			wxPayConfig.setAppType(appType);
    			WXPay wxpay = new WXPay(wxPayConfig);
    			Map<String, String> reqData = new HashMap<String, String>();//只传递了必传字段,其他字段看文档
    			//mch_appid mchid nonce_str sign会自动装配
    			
    			reqData.put("body", "账户充值");
    			reqData.put("detail", "账户充值——平台充值");
    			reqData.put("attach", "附带:账户充值");
    			reqData.put("out_trade_no", outTradeNo);
    			reqData.put("device_info", "SD-WZSY-001");// 非必传,设备号
    			reqData.put("fee_type", "CNY");
    			reqData.put("total_fee",  String.valueOf(total_fee));
    			reqData.put("spbill_create_ip", "127.0.0.1");// 必传
    			reqData.put("notify_url", NATIVE_PAY_NOTIFY_NRL);
    			reqData.put("trade_type", "NATIVE");
    			reqData.put("product_id", outTradeNo);
    //			reqData.put("receipt", "Y");// 电子发票开放入口标识,非必填,需先在平台开通功能才可生效
    			resutlMap = wxpay.unifiedOrder(reqData);
    			
    			String returnCode = resutlMap.get("return_code");
    			String resultCode = resutlMap.get("result_code");
    			if (WXPayConstants.SUCCESS.equals(returnCode) && WXPayConstants.SUCCESS.equals(resultCode)) {
    				
    			}else {
    				
    			}
    			return resutlMap;
    		} catch (Exception e) {
    			LogUtil.exception(e);
    		}
    		return null;
    	}

    查询:(测试公众号和小程序可互查,估计是相互绑定,订单唯一原因)

    	/**
    	 * 查询订单
    	 * 2019年12月18日 上午10:40:04
    	 * @param outTradeNo 商户系统订单号
    	 * @param appType  1小程序  2APP  0公众号
    	 */
    	public static Map<String, String> getOrderInfo(String outTradeNo,int appType) {
    		Map<String, String> resutlMap = null;
    		try {
    			MyWXPayConfig wxPayConfig = new MyWXPayConfig();
    			wxPayConfig.setAppType(appType);
    			WXPay wxpay = new WXPay(wxPayConfig);
    			Map<String, String> reqData = new HashMap<String, String>();//只传递了必传字段,其他字段看文档
    			
    			reqData.put("out_trade_no", outTradeNo);//商户订单号,是
    			resutlMap = wxpay.orderQuery(reqData);
    			LogUtil.log("查询企业付款到零钱结果:" + JSON.toJSONString(resutlMap));
    			
    			String returnCode = resutlMap.get("return_code");
    			String resultCode = resutlMap.get("result_code");
    			if (WXPayConstants.SUCCESS.equals(returnCode) && WXPayConstants.SUCCESS.equals(resultCode)) {
    				
    			}else {
    				
    			}
    			return resutlMap;
    		} catch (Exception e) {
    			LogUtil.exception(e);
    		}
    		return null;
    	}

    使用商户订单查询返回结果:

    {
    	"nonce_str": "6YYDqZ8SqaGzv3MK",
    	"device_info": "SD-WZSY-001",
    	"out_trade_no": "201912192740039573727600640",
    	"trade_state": "NOTPAY",
    	"appid": "wx81711a50b5ad592b",
    	"total_fee": "1",
    	"sign": "DE24B4202FA15510278B167A91484118",
    	"trade_state_desc": "订单未支付",
    	"return_msg": "OK",
    	"result_code": "SUCCESS",
    	"mch_id": "1545047571",
    	"return_code": "SUCCESS"
    }

     

    额外:

    官方接口文档地址: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1

    展开全文
  • :high_voltage: 电子商务-具有管理员功能的完整样板 :high_voltage: 这是具有集成管理页面的完全正常工作的电子商务网站(启用样板和配置) ... 用付款 使用实时聊天 使用邮件重置密码(使用nodemailer)
  • 默认情况下,用户只要扫关注后台首页的二维码,当有用户下单,并完成在线支付(或者货到付款情况下下单即推送)以后,“api工厂” 的官方服务号将会已模板消息的形式提醒你尽快处理订单并发货。 除了以上提醒以外...

    默认情况下,用户只要扫码关注后台首页的二维码,当有用户下单,并完成在线支付(或者货到付款情况下下单即推送)以后,“api工厂” 的官方服务号将会已模板消息的形式提醒你尽快处理订单并发货。

    除了以上提醒以外,“api工厂” 还提供了2种其他的提醒方式:

    1. 通过开通钉钉提醒插件,将提醒信息推送到钉钉的多人群;
      《“api工厂” 钉钉提醒插件使用教程》
    2. 通过你自己的服务号提醒;

    下面主要介绍如何采用自己的服务号进行模板消息的推送:

    设置模板消息模板

    登录自己的微信服务号,设置模板消息模板:
    设置模板消息
    从模板库中搜索 “新订单通知” 的模板消息模板,点击添加,然后复制出“模板ID”接下来会用到;

    服务号商户配置

    新注册一个工厂后台账号,上面将你微信服务号的appid和secret配置到上面,记录下这个新注册的“商户ID”;

    获得openid

    这里的 openid,是指的接收提醒的这个人,在你自己的服务号上面对应的 openid;
    如何获得 openid 呢?
    登录你的服务号的后台 https://mp.weixin.qq.com/ ,点击左侧菜单的 “用户管理” ,找到用户后,点击进入用户的详细界面;
    在浏览器的地址栏中,你能看到一个链接地址,其中 tofakeid 对应的就是这个用户的 openid

    至此,你已经通过上面的步骤获得了3个数据:“模板ID”、“商户ID”、“openid”

    配置提醒

    退出刚才登录的服务号的api工厂后台,登录你之前注册的小程序的api工厂后台;
    在左侧菜单,系统设置 --> 系统参数 菜单,添加以下3个系统参数设置:

    wx_template_alarm_code      =  “模板ID”
    wx_template_alarm_merchant_id = “商户ID”
    wx_template_alarm_openid = “openid”
    

    这3个参数的值,分别对应上面步骤获取的3个对应值

    完成

    通过以上配置,你可以进行测试。

    展开全文
  • 此购物应用程序具有以下屏幕:简介,着陆,登录,注册,忘记密码,密码重置,新闻稿,商店,产品列表,产品网格,产品信息,过滤器页面,过滤结果网格,过滤结果列表,结帐单,结帐付款,结帐确认,购物车页面,订单...
  • 电脑商城多用户,个人支付宝免签,无需在支付宝申请接口,直接填写支付就可以实现在线支付功能,另外再加上24套微信店铺模板一起打包,在这里完全免费分享,无任何限制,免金币,免RMB下载。在这里非常感谢粉丝分享...
  • 近日,FastReport VCL更新至v6.7,在新版本中,添加了对最新版本IDE的支持,简化了用于付款标准的条形的创建,新增从预览窗口直接编辑RichView的功能,同时修复了多个Bug问题。欢迎下载体验。(点击下方按钮下载)...
  • 基于几何特征的方法符合人们对人脸特征的认识,另外,每幅人脸只存储一个特征,所以占用的空间比较小,同时,这种方法对光照引起的变化并不会降低其识别率,而且特征模板的匹配和识别率比较高。 刷脸支付,需要设备...
  • 软件名称:精典SQL仿阿里巴巴B2B商贸行业网,行业网模板,行业建站首选 软件版本:V2008 建议分类:电子商务 联系EMAIL:webmaster@maxtang.cn<br>官方网站:http://www.maxtang.cn/<br>演示网站:...
  • Destoon B2B仿淘宝电子商务网站,UTF8版本,基于PHP MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。 ...
  • 支持电脑端+手机端+微信端(三端合一)支持站内搜索支持会员系统支持商城系统支持万能表单支持支付宝(即时到帐接口)/微信(扫支付)付款方式支持中/英双语支持QQ/旺旺客服支持动/静态页面访问支持接入微信公众号...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 147
精华内容 58
关键字:

付款码模板