uniapp支付之App、小程序、H5(微信端)、支付宝、百度支付、头条支付

 

APP支付(内置)

appPay.js

/**
 * 5+App支付,仅支持支付宝以及微信支付
 *
 * 支付宝Sdk集成,微信sdk未集成
 *
 * @param : provider(String) ->被支付方
 * @param : orderInfo(String) ->订单信息
 * @param : success,fail(Json) ->回调后的json信息
 *
 */

const mPay = (provider, orderInfo, success, fail) => (
    uni.requestPayment({
        provider,
        orderInfo, //订单数据
        success(res) {
            success(JSON.stringify(res));
        },
        fail(err) {
            fail(JSON.stringify(err));
        }
    });
)

export default mPay;

 

微信小程序支付(内置)

mPay.js

/**

 * 微信小程序支付,仅支持微信支付(后续可能集成网页支付宝支付web-view)
 * @param : provider(String) ->付款商家
 * @param : timeStamp(String) ->时间戳(当前支付时间)
 * @param : nonceStr(String) ->支付密匙
 * @param : packages(String) ->支付id
 * @param : signType(String) ->加密方式(默认MD5)
 * @param : paySign(String)
 *
 * 小程序支付调用
 *
 * wePay(provider, timeStamp, nonceStr, packages, signType, paySign,res=>{},fail=>{})
 */

const wePay = (provider, timeStamp, nonceStr, packages, signType, paySign,success,fail) => (
    uni.requestPayment({
        provider,
        timeStamp,
        nonceStr,
        package: packages,
        signType,
        paySign,
        success(res) {
            success(JSON.stringify(res));
        },
        fail(err) {
            fail(JSON.stringify(err))
        }
    });
)

export default wePay;

 

 

公众号支付(如果使用微信官方weixin-js-sdk,请使用跨端兼容方案

(需要引入模块:jweixin-module),详情见yarn以及npm安装

pPay.js

/*

    微信支付方法(uni-app h5)适用
    获取微信加签信息
    @param{data}:获取的微信加签
    @param{res}:成功回调
    @param{fail}:失败回调
    @warn:因为package为严格模式下的保留字,不能用作变量.
    @use

        wPay({
            appId,
            timeStamp,
            nonceStr,
            signature,
            package,
            paySign
        },res=>{
            console.log('调用成功!');
        },fail=>{
            console.log('调用失败!');
        })

*/

const wx = require('jweixin-module');
const wexinPay = (data, cb, errorCb) => {
    let [appId, timestamp, nonceStr, signature, packages, paySign] = [data.appId, data.timeStamp, data.nonceStr, data.signature,
        data.package, data.paySign
    ];

    wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId, // 必填,公众号的唯一标识
        timestamp, // 必填,生成签名的时间戳
        nonceStr, // 必填,生成签名的随机串
        signature, // 必填,签名,见附录1
        jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2

    });

    wx.ready(function() {
        wx.chooseWXPay({
            timestamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
            nonceStr, // 支付签名随机串,不长于 32 位
            'package': packages, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
            signType: 'MD5', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
            paySign, // 支付签名
            success(res) {
                // 支付成功后的回调函数
                cb(res);
            },
            fail(res) {
                errorCb(res);
            }
        });
    });

    wx.error(function(res) {
        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
        /*alert("config信息验证失败");*/

    });

}

export default wexinPay;

 

关于H5详见微信官方WX-JS-SDK:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

参考:https://www.cnblogs.com/cisum/p/10142412.html

支付宝支付

在小程序端调用 my.request 接口,连接到商户服务端,提交订单信息,返回TradeNo。

  uni.request({
  url: '商户服务端地址',//须加httpRequest域白名单
  method: 'POST',
  data: {//data里的key、value是开发者自定义的
    from: '支付宝',
    order: 'XXXXX',//订单信息
  },
  dataType: 'json',
  success: function(res) {
    uni.alert({content: 'success'});
  },
  fail: function(res) {
    uni.alert({content: 'fail'});
  },
  complete: function(res) {
    uni.hideLoading();
    uni.alert({content: 'complete'});
  }
});


2.在服务端调用 alipay.trade.create (统一收单交易创建接口),获得支付宝交易号 tradeNO(以 Java 代码为例)。

//实例化客户端
AlipayClient alipayClient = new     DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.create.
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。
request.setBizContent("{" +
        "\"out_trade_no\":\"20171115010101001\"," +
        "\"total_amount\":0.01," +
        "\"subject\":\"Iphone616G\"," +
        "\"buyer_id\":\"用户pid\"" +
        "}");
try {
    //使用的是execute
    AlipayTradeCreateResponse response = alipayClient.execute(request);
    String trade_no = response.getTradeNo();//获取返回的tradeNO。
} catch (AlipayApiException e) {
    e.printStackTrace();
}


注意:
在小程序场景内 alipay.trade.create 接口中的“buyer_id”为必填项,若未传入调式时会出现报错。推荐使用开放平台提供的服务端 SDK,并参考代码示例编写;点击下载服务端 SDK。具体业务参数请参考统一收单交易创建接口。

3.在小程序端使用 tradeNO,调用 my.tradePay 接口唤起支付收银台。

my.tradePay({
        tradeNO: '2017111521001104105336677922',  
        success: function(res) {
            my.alert(res.resultCode);
        },
        fail: function(res) {
          my.alert(res.resultCode);
       },
    });

百度小程序支付和头条小程序支付可见另一篇博客:

支付宝百度微信头条小程序支付功能实现(原生)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值