调用支付JSAPI缺少参数:total_fee
使用小程序支付时,出现调用支付JSAPI缺少参数:total_fee,
解决方法:package: 'prepay_id='+payData.prepay_id, 需要加上prepay_id=
使用小程序支付时,出现调用支付JSAPI缺少参数:total_fee,
解决方法:package: 'prepay_id='+payData.prepay_id, 需要加上prepay_id=
1.在mobile/app/resources/views下面创建页面文件夹(test),创建index.html页面访问文件
1.在 includes/modules/payment文件夹下创建 支付插件.php 文件(例:payplugins.php)
--1.1.payplugins.php 文件内容包含如下内容
<?php
if (!defined('IN_ECS'))
{
die('Hacking attempt');
}
$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/payplugins.php';
//payplugins.php这个文件名就是languages对应语言包的payment下的文件名
if (file_exists($payment_lang))
{
global $_LANG;
include_once($payment_lang);
}
/* 模块的基本信息 */
if (isset($set_modules) && $set_modules == TRUE)
{
$i = isset($modules) ? count($modules) : 0;
/* 代码 */
$modules[$i]['code'] = basename(__FILE__, '.php');
/* 描述对应的语言项 */
$modules[$i]['desc'] = 'payplugins_desc';//这是对支付方式的描述语言包里对应为$_LANG['payplugins_desc']
//下面的选项自定义填写这里不做修改
/* 是否支持货到付款 */
$modules[$i]['is_cod'] = '0';
/* 是否支持在线支付 */
$modules[$i]['is_online'] = '0';
/* 作者 */
$modules[$i]['author'] = 'ECSHOP TEAM';
/* 网址 */
$modules[$i]['website'] = 'http://www.ecshop.com';
/* 版本号 */
$modules[$i]['version'] = '1.0.0';
/* 配置信息 */
$modules[$i]['config'] = array();
/*
$modules[$i]['config'] = array(
array('name' => 'payplugins_test', 'type' => 'text', 'value' => ''),
array('name' => 'payplugins_pay_method', 'type' => 'select', 'value' => '')
);
//如果按照注释中方法写配置信息
语言文件中应该加入
$_LANG['payplugins_test'] = '';
$_LANG['payplugins_pay_method'] = '';
$_LANG['payplugins_pay_method'][0] = '';
$_LANG['payplugins_pay_method'][1] = '';
$_LANG['payplugins_pay_method'][2] = '';
*/
return;
}
/**
* 类
*/
class payplugins//类名与文件名保持一直
{
/**
* 构造函数
*
* @access public
* @param
*
* @return void
*/
//php5.3版本以上__construct形式构造函数需要在类名同名方法的前面定义
function __construct()
{
$this->payplugins();
}
function payplugins()
{
}
/**
* 提交函数(用于生成支付代码)
*/
function get_code()
{
/*your code*/
return;
}
/**
* 处理函数(响应支付后的操作,可在此处改变订单的状态、验证数据的完整性,也可在有回调地址的时候封装回调php文件改变订单状态和验证数据完整性)
*/
function respond()
{
/*your code*/
return;
}
}
?>
--1.2.respond()方法会被respond.php文件调用,用于判断支付是否完成(respond.php只用于渲染信息)
2.languages/zh_cn/payment/目录下新建一个payplugins.php文件(注:文件名必须和1创建的文件名相同),必要情况下在其他语言文件夹下也创建相同文件。
<?php
global $_LANG;
$_LANG['payplugins'] = '支付插件的名称';//$_LANG['这里的字段一定要与文件名保持一直,否则在后台不出现支付方式的名称']
$_LANG['payplugins_desc'] = '这里是插件的描述信息';
//之后的项目根据不同的支付方式自定义即可一般以$_LANG['payplugins_xxx'] = '';的形式展现
?>
3.创建好上面的文件后在ecshop后台支付方式里面就能出现对应的插件了
4.移动端mobile支付创建
(不同版本的ecshop,mobile文件夹内容可能不同,在根目录下的mobile文件夹----我的目录类似laravel项目目录)
--4.1.在根目录/mobile/app/Plugins/payment文件夹下创建和includes/modules/payment一样文件名的文件payplugins.php,文件内容基本一样,但需要去除插件基本信息和会使使用报错的if (!defined('IN_ECS')){die('Hacking attempt');}
外网引用:
Ecshop把每一种支付方式都封装成一个类,比如支付宝支付方式,对应的文件是
includes\modules\payment\alipay.php,这个文件里面封装了类是alipay,这个类有两个方法,一个是生成支付代码的get_code(),根据不同支付接口所需的参数进行配置,然后生成一个字符串,这个字符串就是支付代码;另外一个是响应操作respond()。其中,接收响应的页面都是通过return_url(basename(__FILE__, '.php'))函数指定的,生成的链接是respond.php?code=,其中code后面的参数就是根据不同的支付方式而不同。Respond.php则根据不同的第三方支付返回的信息进行处理。
parseImg() {
navigator.permissions.query({ name: 'clipboard-read' }).then(result => {
// 如果授予读取剪贴板的权限或用户将
// 被提示允许它,我们继续。
if (result.state === 'granted' || result.state === 'prompt') {
navigator.clipboard
.readText()
.then(TEXT => {
//我的代码来处理粘贴
console.log(TEXT)
this.checkImgExists(TEXT)
.then(() => {
this.$message({
})('有效链接')
this.url = TEXT
this.srcList.push(TEXT)
})
.catch(() => {
console.log('无效链接')
})
})
.catch(ERROR => {
console.error('读取剪贴板内容失败:', ERROR)
this.$message({
type: 'danger',
message: '无法获取该权限,请确认是否开启,或是否支持'
})
})
}
})
},
// 检测图片链接是否可用
checkImgExists(imgurl) {
return new Promise(function(resolve, reject) {
var ImgObj = new Image()
ImgObj.src = imgurl
ImgObj.onload = function(res) {
resolve(res)
}
ImgObj.onerror = function(err) {
reject(err)
}
})
}
内容有引用其他网站内容,仅作学习记录和参考
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) { // 无法获取到true
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
官网描述: 自定义校验 callback 必须被调用
自定义验证的时候如果不加上callback()会导致没有函数返回,无论是在if上还是其他判断条件都必须完整的有callback()
bad example:
var checkPWd = (rule, value, callback) => {
var reg = /^[a-zA-Z0-9_-]+$/
if (!reg.test(value)) {
callback(new Error('XXXXXXXXXXXXXXXXXXXXX'))
}
}; // valid无法获取到true,false能正常获取
good example:
var checkPWd = (rule, value, callback) => {
var reg = /^[a-zA-Z0-9_-]+$/
if (!reg.test(value)) {
callback(new Error('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'))
} else {
callback() // 必须要callback , 否则 提交验证不执行
}
}; // 可以正常使用验证并通过