微擎api.php,微擎支付api发起支付并验证

1. 设置微擎上的支付参数

2. 微信商户号配置配置

登录商户号–产品中心–开发配置

3. PHP发起支付

[http://s.we7.cc/index.php?c=wiki&do=view&id=1&list=363

]()

public function doMobilePay() {

//获取用户要充值的金额数

$fee = floatval($_GPC['money']);

if($fee <= 0) {

message('支付错误, 金额小于0');

}

// 一些业务代码。

//构造支付请求中的参数

$params = array(

'tid' => $chargerecord['tid'], //充值模块中的订单号,此号码用于业务模块中区分订单,交易的识别码

'ordersn' => $chargerecord['tid'], //收银台中显示的订单号

'title' => '系统充值余额', //收银台中显示的标题

'fee' => $chargerecord['fee'], //收银台中显示需要支付的金额,只能大于 0

'user' => $_W['member']['uid'], //付款用户, 付款的用户名(选填项)

);

//调用pay方法

$this->pay($params);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

publicfunctiondoMobilePay(){

//获取用户要充值的金额数

$fee=floatval($_GPC['money']);

if($fee<=0){

message('支付错误, 金额小于0');

}

// 一些业务代码。

//构造支付请求中的参数

$params=array(

'tid'=>$chargerecord['tid'],//充值模块中的订单号,此号码用于业务模块中区分订单,交易的识别码

'ordersn'=>$chargerecord['tid'],//收银台中显示的订单号

'title'=>'系统充值余额',//收银台中显示的标题

'fee'=>$chargerecord['fee'],//收银台中显示需要支付的金额,只能大于 0

'user'=>$_W['member']['uid'],//付款用户, 付款的用户名(选填项)

);

//调用pay方法

$this->pay($params);

}

4. js发起支付

[http://s.we7.cc/index.php?c=wiki&do=view&id=1&list=364

]()

5. 验证支付

[http://s.we7.cc/index.php?c=wiki&do=view&id=1&list=365]()

//该代码片断在/framework/builtin/recharge/site.php中

public function payResult($params) {

//一些业务代码

//根据参数params中的result来判断支付是否成功

if ($params['result'] == 'success' && $params['from'] == 'notify') {

//此处会处理一些支付成功的业务代码

load()->func('logging');//载入日志函数

logging_run($params);//记录文本日志

}

//因为支付完成通知有两种方式 notify,return,notify为后台通知,return为前台通知,需要给用户展示提示信息

//return做为通知是不稳定的,用户很可能直接关闭页面,所以状态变更以notify为准

//如果消息是用户直接返回(非通知),则提示一个付款成功

//如果是JS版的支付此处的跳转则没有意义

if ($params['from'] == 'return') {

if ($params['result'] == 'success') {

message('支付成功!', '../../app/' . url('mc/home'), 'success');

} else {

message('支付失败!', '../../app/' . url('mc/home'), 'error');

}

}

}

class *****{

}

String:

array (

‘appid’ => ‘wx078364682b09cc50’,

‘attach’ => ‘2’,

‘bank_type’ => ‘CFT’,

‘cash_fee’ => ‘100’, //_**单位是分 **_

‘fee_type’ => ‘CNY’,

‘is_subscribe’ => ‘Y’,

‘mch_id’ => ‘1490439232’,

‘nonce_str’ => ‘ST0909Nr’,

‘openid’ => ‘opqp80q1XnInacQ7cniTcFX65ngg’,

‘out_trade_no’ => ‘2018060611000700001468438396’,

‘result_code’ => ‘SUCCESS’,

‘return_code’ => ‘SUCCESS’,

‘sign’ => ‘5BF9AFF7F553B2DBEE3587EB6031CAC2’,

‘time_end’ => ‘20180606110013’,

‘total_fee’ => ‘100’,

‘trade_type’ => ‘JSAPI’,

‘transaction_id’ => ‘4200000133201806063859003646’,

)

[2018-06-06 11:00:13] trace /payment/wechat/notify.php? weid=; uniacid=2; acid=2; result=success; type=; from=notify; tid=20180606555252486608; uniontid=2018060611000700001468438396; transaction_id=; trade_type=JSAPI; follow=1; user=opqp80q1XnInacQ7cniTcFX65ngg; fee=1.00; tag={acid=2; uid=2; transaction_id=4200000133201806063859003646; }; is_usecard=0; card_type=0; card_fee=1.00; card_id=; paytime=1528254013;

//商品编号生成

(YmdHi)拼接上兑换表生成的Id

//订单号的生成

(YmdHi)拼接上订单表生成的Id

echo date(‘Ymd’) . str_pad(mt_rand(1, 99999), 5, ‘0’, STR_PAD_LEFT);

订单号常见的几种方式:

1.利用数据库主键值产生一个自增长的订单号(订单号即数据表的主键)

2.日期+自增长数字的订单号(比如:2012040110235662)

3.产生随机的订单号(65865325365966)

4.字母+数字字符串式,字母有包含特别意义,C02356652

订单号设计原则: 按需设计

用来检索订单详细信息的唯一特征码,可以利用订单号检索到下单日期、产品类别、颜色、尺码(或款式)、仓位等信息,订单号包含过多的信息有点“画蛇添足”的意味!只要按需设计即可!

订单号设计用户体验规则:

1.订单号无重复性;

2.如果方便客服的话,最好是“日期+自增数”样式的订单号,客服一看便知道订单是否在退货保障期限内容;

3.订单号长度尽量保持短(10位以内),方便用户,尤其电话投诉时,长的号码报错几率高,影响客服效率;

4.订单号尽量保持数字型(纯整数),在数据库订单索引查询中,长整数字型的数据索引与检索效率,远远高于文本型,因此尽量避免“字母+数字字符串式”!

做商城类项目经常需要生成唯一订单号,下面来个汇总!

方法一:

return date(‘Ymd’) . str_pad(mt_rand(1, 99999), 5, ‘0’, STR_PAD_LEFT);

方法二: 正在使用。。。

return date(‘Ymd’).substr(implode(NULL, array_map(‘ord’, str_split(substr(uniqid(), 7, 13), 1))), 0, 8);

方法三:以前使用。。。

public function make_order($user_id)

{

return mt_rand(10,99)

. sprintf(‘%010d’,time() – 946656000)

. sprintf(‘%03d’, (float) microtime() * 1000)

. sprintf(‘%03d’, (int) $user_id % 1000);

}

方法四:

$yCode = array(‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’);

$orderSn = $yCode[intval(date(‘Y’)) – 2011] . strtoupper(dechex(date(‘m’))) . date(‘d’) . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf(‘%02d’, rand(0, 99));

### 日志记录

load()->func(‘logging’);//载入日志函数

logging_run($params);//记录文本日志

存放在/data/logs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值