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数据,仿微信的回调格式
发表评论 取消回复