payjs 源码_GitHub - wlijie/payjs_test: PAYJS 小程序支付框架与示例

PAYJS 小程序支付框架与示例

本示例采用了框架 + 示例调用的形式,用于使用 PAYJS 的小程序支付

注:根据微信规范,iOS 系统上不能使用虚拟支付

注:最低基础库为 2.4.0,请注意修改小程序后台设置中的最低基础库版本和开发者工具中的调试基础库版本

测试

克隆本仓库后使用微信开发者工具加载本项目源码,注意在创建项目时将 appid 修改为自己的

在 utils/util.js 中

// 在下面设置商户号

const mchid = ''

// 在下面设置密钥

// 特别注意:此项设置应该仅供测试,生产环境下请在后端完成签名,切忌在小程序内暴露商户密钥

const secret = ''

这两个部分分别设置为自己的商户号和密钥(不设置的话你测试用的钱结算到我这里我不还)

生产环境

Step 1

在 app.json 文件中加入

"navigateToMiniProgramAppIdList": [

"wx959c8c1fb2d877b5"

]

Step 2

将 components/payjs/* 整个文件夹复制到你的项目中的相同结构文件夹

Step 3

在需要用到支付功能的页面的 .json 文件中加入

"usingComponents": {

"payjs": "/components/payjs/payjs"

}

Step 4

在需要用到支付功能的页面的 .wxml 文件最底端加入

Step 5

在需要用到支付功能的页面的 .js 文件中的 data 数据内加入以下三个数据

{

orderParams: {}, // 支付发起参数

preparePay: false, // 控制 payjs 组件的创建与销毁

paying: false, // 可选:如需知晓用户是否「已经跳转到了 PAYJS 小程序还未返回」的状态则可通过事件处理函数监听事件内的 paying 数据

}

数据名称可以更改,但是更改时请注意保证和上面的 .wxml 文件内数据绑定及下面的事件处理函数中保持一致

orderParams 用于放置发起支付的参数(必填)

preparePay 用于控制 payjs 支付组件的创建与销毁

在此页面加入四个事件处理函数

/**

* 支付成功的事件处理函数

*

* res.detail 为 PAYJS 小程序返回的订单信息

*

* 可通过 res.detail.payjsOrderId 拿到 PAYJS 订单号

* 可通过 res.detail.responseData 拿到详细支付信息

*/

bindPaySuccess (res) {

console.log('success', res)

console.log('[支付成功] PAYJS 订单号:', res.detail.payjsOrderId)

this.setData({

orderResults: res.detail,

needRefreshOrderParams: true

})

wx.showModal({

title: '支付成功',

content: 'PAYJS 订单号:' + res.detail.payjsOrderId,

showCancel: false

})

},

/**

* 支付失败的事件处理函数

*

* res.detail.error 为 true 代表传入小组件的参数存在问题

* res.detail.navigateSuccess 代表了是否成功跳转到 PAYJS 小程序

* res.detail.info 可能存有失败的原因

*

* 如果下单成功但是用户取消支付则可在 res.detail.info.payjsOrderId 拿到 payjs 订单号

*/

bindPayFail (res) {

console.log('fail', res)

if (res.detail.error) {

console.error('发起支付失败', res.detail.info)

} else if (res.detail.navigateSuccess) {

console.log('[取消支付] PAYJS 订单号:', res.detail.info.payjsOrderId)

}

},

/**

* 支付完毕的事件处理函数

*

* 无论支付成功或失败均会执行

* 应当在此销毁 payjs 组件

*/

bindPayComplete () {

console.log('complete')

this.setData({

preparePay: false, // 销毁 payjs 组件

})

},

/**

* 【可选】组件内部数据被修改时的事件

*

* 当前仅用于监听 paying 数据

* 当用户跳转到 PAYJS 小程序并等待返回的过程中 paying 值为 true

*/

bindDataChange (res) {

if (res.detail.paying) {

this.setData({

paying: res.detail.paying

})

}

}

Step 6

为支付页面的支付按钮绑定以下事件

发起支付

onTapPay: function() {

// 事件处理函数 - 点击支付按钮

this.setData({

preparePay: true,

orderParams: {

// 这里传入【后端返回并签名完毕】的支付发起参数

}

})

},

写在最后 & 免责声明

订单信息的生成、签名与订单支付状态的判断都应该在后端返回和判断,小程序的返回值仅应作为参考使用,应以为准

如在使用过程中有问题,请阅读代码,如仍有问题,请发 Issue

本人不保证此框架可一直可用也不为此框架所产生的任何问题负责

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2分钟快速集成支付宝快捷支付,帮助没有做过支付宝,又需要快速集成支付支付的用户。配置完成之后,只需要一行代码即可代用支付支付。 1. 将本工程中的IntegratedAlipay文件夹导入工程中,记得选copy 2.点击项目名称,点击“Build Settings”选项卡,在搜索框中,以关键字“search” 搜索,对“Header Search Paths”增加头文件路径:“$(SRCROOT)/项目名称/IntegratedAlipay/AlipayFiles”(注意:不包括引号,如果不是放到项目根目录下,请在项目名称后面加上相应的目录名)。 3. 点击项目名称,点击“Build Phases”选项卡,在“Link Binary with Librarles” 选项中,新增“AlipaySDK.framework”、“UIKit.framework”和“SystemConfiguration.framework” 两个系统库文件。如果项目中已有这两个库文件,可不必再增加。 4. 在“AlipayHeader.h”头文件中设置kPartnerID、kSellerAccount、kAppScheme、kPrivateKey的值(注意,建议除appScheme以外的字段都从服务器请求) 5. 在需要用的地方导入“AlipayHeader.h”,并使用“[AlipayRequestConfig alipayWithPartner:...”方法进行支付 6. 在AppDelegate中处理事件回调(可直接复制下面内容): - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { //如果极简 SDK 不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDK if ([url.host isEqualToString:@"safepay"]) { [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { NSLog(@"result = %@",resultDic); }]; if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回 authCode [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) { NSLog(@"result = %@",resultDic); }]; } return YES; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值