1.配置易宝的商户公钥和私钥,使用易宝的工具,点击后直接获取,公钥复制到商户后台设置上去,私钥放在程序代码。下面是生成预支付订单的信息代码。wemall/model/payment.mod.php
$private_key ="私钥";
//YopRequest的第一个参数为appkey,固定为app_+商户编号
$request = new YopRequest("app_10086034062", $private_key);
$yopenid=empty($wechat['openid']) ? $_W['fans']['from_user'] : $wechat['openid'];
if(!$yopenid && $_REQUEST['openid']){
$yopenid = trim($_REQUEST['openid']);
}
//加入请求参数,参考手册
$request->addParam("parentMerchantNo", "10086034062"); //发起方商户编号
$request->addParam("merchantNo", "10086034062"); //收款商户编号
$request->addParam("payWay", "MINI_PROGRAM"); //回调通知地址
$request->addParam("channel", "WECHAT"); //回调通知地址
$request->addParam("orderId", $params['uniontid']); //订单号
$request->addParam("orderAmount",number_format($params['global_fee'],2) ); //订单金额
// $request->addParam("orderAmount", number_format($params['global_fee'],2) ); //订单金额
$request->addParam("goodsName", $params['title']); //商品信息
$request->addParam("notifyUrl", (WE7_WMALL_ISHTTPS && $notify_use_http ? WE7_WMALL_URL_NOHTTPS : WE7_WMALL_URL) . 'payment/wechat/notify.php'); //回调通知地址
$request->addParam("appId", $wechat['appid']); //回调通知地址
$request->addParam("userId", $yopenid); //回调通知地址
$request->addParam("userIp", CLIENT_IP); //回调通知地址
$request->addParam("scene", "OFFLINE"); //回调通知地址
//提交Post请求,第一个参数为手册上的接口地址
$new_response = YopRsaClient::post("/rest/v1.0/aggpay/pre-pay", $request);
// var_export($new_response);die;
$newresult=(array)$new_response->result;
if(is_array($newresult)){
$prePayTn= json_decode($newresult['prePayTn'],true);
$prepayid= $prePayTn['package'];
$wOpt['appId'] = $prePayTn['appId'];
$wOpt['nonceStr'] = $prePayTn['nonceStr'];
$wOpt['package'] = $prePayTn['package'];
$wOpt['signType'] = $prePayTn['signType'];
$wOpt['timeStamp'] = $prePayTn['timeStamp'];
$wOpt['paySign'] = $prePayTn['paySign'];
$paylog = pdo_get('tiny_wmall_paylog', array('uniacid' => $_W['uniacid'], 'order_sn' => $params['tid']));
if (!empty($paylog)) {
$data = iunserializer($paylog['data']);
$data['prepay_id'] = "$prepayid";
pdo_update('tiny_wmall_paylog', array('data' => iserializer($data)), array('id' => $paylog['id']));
}
}
return $wOpt; 2.支付回调后的内容,是需要在解密的,解密的时候公钥必须使用易宝官方的,然后使用Post获取内容,如果需要xml格式,需要先解密,然后用函数转换成xml。大概代码如下。payment/wechat/notify.php
require_once '../../../../addons/we7_wmall/library/yop-php-sdk/lib/YopRsaClient.php';
require_once '../../../../addons/we7_wmall/library/yop-php-sdk/lib/YopClient3.php';
require_once '../../../../addons/we7_wmall/library/yop-php-sdk/lib/Util/YopSignUtils.php';
function newdata($response){
$arr=json_decode($response,true);
$arrpayerInfo=json_decode($arr['payerInfo'],true);
$newArr['appid']='wx8fc9a8f722c5910a';
$newArr['attach']='1:wxapp';
$newArr['bank_type']='OTHERS';
$newArr['cash_fee']=$arr['payAmount'];
$newArr['fee_type']='CNY';
$newArr['is_subscribe']='N';
$newArr['mch_id']=$arr['merchantNo'];
$newArr['nonce_str']=random(8);
$newArr['openid']=$arrpayerInfo['userID'];
$newArr['out_trade_no']=$arr['orderId'];
$newArr['result_code']=$arr['status'];
$newArr['return_code']=$arr['status'];
$newArr['sign']=random(16);
$newArr['time_end']=date('Ymdhis',strtotime($arr['paySuccessDate']));
$newArr['total_fee']=$arr['payAmount']*100;
$newArr['trade_type']='JSAPI';
$newArr['transaction_id']=$arr['channelOrderId'];
$newXmldata=array2xml($newArr);
flog2('组装后的仿微信参数', $newXmldata, 'n1',false);
return $newXmldata;
}
function callback($source){
// flog2('解密后的参数two', 'two', 'two',false);
// require_once MODULE_ROOT . '/library/yop-php-sdk/lib/Util/YopSignUtils.php';
// flog2('解密后的参数one', 'one', 'one',false);
// require_once MODULE_ROOT . '/library/yop-php-sdk/lib/YopRsaClient.php';
// flog2('解密后的参数three', 'three', 'three',false);
$private_key ="私钥";
$public_key ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6p0XWjscY+gsyqKRhw9MeLsEmhFdBRhT2emOck/F1Omw38ZWhJxh9kDfs5HzFJMrVozgU+SJFDONxs8UB0wMILKRmqfLcfClG9MyCNuJkkfm0HFQv1hRGdOvZPXj3Bckuwa7FrEXBRYUhK7vJ40afumspthmse6bs6mZxNn/mALZ2X07uznOrrc2rk41Y2HftduxZw6T4EmtWuN2x4CZ8gwSyPAW5ZzZJLQ6tZDojBK4GZTAGhnn3bg5bBsBlw2+FLkCQBuDsJVsFPiGh/b6K/+zGTvWyUcu+LUj2MejYQELDO3i2vQXVDk7lVi2/TcUYefvIcssnzsfCfjaorxsuwIDAQAB";//此公钥必须使用官方的,不是自己的
$source = urldecode($source['response']);//
$data = YopSignUtils::decrypt($source,$private_key,$public_key);
// var_export($dataa);
// die;
flog2('解密后的参数', $data, 'jiami',false);
return $data;
}
function flog2($name, $message, $filename = 'we7_wmall', $clean = false) {
$filename = IA_ROOT . "/addons/we7_wmall/resource/logs/{$filename}.txt";
if($clean) {
@unlink($filename);
}
load()->func('file');
mkdirs(dirname($filename));
$content = date('Y-m-d H:i:s') . " {$name} :开始==================\n";
$content .= var_export($message, 1);
$content .= "\n";
$content .= date('Y-m-d H:i:s') . " {$name} :结束==================\n";
$content .= "\n";
$fp = fopen($filename, 'a+');
fwrite($fp, $content);
fclose($fp);
return true;
}
$_W['uniacid'] = 1;
$input = $_POST;//file_get_contents('php://input');
flog2('回调的参数', $input, 'notify',false);
$input=callback($input); //解密回调数据
$input=newdata($input);//拼接xml数据,仿微信的回调格式
发表评论 取消回复