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数据,仿微信的回调格式


点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部
{__SCRIPT__}