fields = ['appid','convert_sn','batch_code','commonid','time','appkey','mobile','convert_type']; } public static function setUpBeforeClass() : void { Base::run_util(); } public function testKey() { $pri_key = BASE_ROOT_PATH . '/helper/openapi/keys/jyc_pri.pem'; $pub_key = BASE_ROOT_PATH . '/helper/openapi/keys/jyc_pub.pem'; $key = file_get_contents($pri_key); $pri = openssl_get_privatekey($key); $err = openssl_error_string(); $key = file_get_contents($pub_key); $pub = openssl_get_publickey($key); $err = openssl_error_string(); $body = 'discount=0.00&payment_type=1&subject=%E5%AE%9E%E7%89%A9%E8%AE%A2%E5%8D%95_580507223514222365&trade_no=2016012721001004800042946454&buyer_email=13911129867&gmt_create=2016-01-27+15%3A25%3A29¬ify_type=trade_status_sync&quantity=1&out_trade_no=580507223514222365&seller_id=2088121219613123¬ify_time=2016-01-27+15%3A25%3A29&body=%E5%95%86%E5%93%81%E8%AF%A6%E6%83%85&trade_status=WAIT_BUYER_PAY&is_total_fee_adjust=Y&total_fee=8.00&seller_email=napheir.ao%40lrlz.com&price=8.00&buyer_id=2088202332994802¬ify_id=66af3b99b765d046d2d533eaf6558fcm68&use_coupon=N'; $body = 'discount=0.00&payment_type=1&subject=%E5%AE%9E%E7%89%A9%E8%AE%A2%E5%8D%95_280507226197761365&trade_no=2016012721001004800047345139&buyer_email=13911129867&gmt_create=2016-01-27+16%3A10%3A55¬ify_type=trade_status_sync&quantity=1&out_trade_no=280507226197761365&seller_id=2088121219613123¬ify_time=2016-01-27+16%3A10%3A55&body=%E5%95%86%E5%93%81%E8%AF%A6%E6%83%85&trade_status=WAIT_BUYER_PAY&is_total_fee_adjust=Y&total_fee=8.00&seller_email=napheir.ao%40lrlz.com&price=8.00&buyer_id=2088202332994802¬ify_id=44d5cc359f27f5cb6e31fb10f480fb0m68&use_coupon=N'; openssl_sign($body, $signed, $pri); $res = openssl_verify($body, $signed, $pub); $err = openssl_error_string(); $s = base64_encode($signed); $s = urlencode($s); $sign = 'lnxpRmnHsaeUoPgtCrGm%2FtWohi3ORJk85q9Ic6X4c10q9O%2FASMXA2Z%2BzAH9%2BgPZAwsMywUA9O4HQ3ZCCrSpPhzJ8hEQ8Dc2SsMnvmeY6UqA7Zi6MZBTSeU1AuV3IV0tN4DTpnuk9ceetwQhNEwCiRo9vjrC%2B0TTHGfXb94OfJuM%3D'; $signx = urldecode($sign); $signy = base64_decode($signx); $res = openssl_verify($body, $signy, $pub); $err = openssl_error_string(); } public function testVerify() { $pri_key = BASE_ROOT_PATH . '/helper/openapi/pub/jyc_pri.pem'; $key = file_get_contents($pri_key); $pri = openssl_get_privatekey($key); $body = 'discount=0.00&payment_type=1&subject=%E5%AE%9E%E7%89%A9%E8%AE%A2%E5%8D%95_280507226197761365&trade_no=2016012721001004800047345139&buyer_email=13911129867&gmt_create=2016-01-27+16%3A10%3A55¬ify_type=trade_status_sync&quantity=1&out_trade_no=280507226197761365&seller_id=2088121219613123¬ify_time=2016-01-27+16%3A10%3A55&body=%E5%95%86%E5%93%81%E8%AF%A6%E6%83%85&trade_status=WAIT_BUYER_PAY&is_total_fee_adjust=Y&total_fee=8.00&seller_email=napheir.ao%40lrlz.com&price=8.00&buyer_id=2088202332994802¬ify_id=44d5cc359f27f5cb6e31fb10f480fb0m68&use_coupon=N'; openssl_sign($body, $signed, $pri); $pub = openapi\KeyManager::instance()->verify('JYC_CHANNEL',$body,$signed); } public function testConvert() { $pri_key = BASE_ROOT_PATH . '/helper/openapi/pub/jyc_pri.pem'; $key = file_get_contents($pri_key); $pri = openssl_get_privatekey($key); $input = ['appid' => 'JYC_CHANNEL', 'convert_sn' => '2356894142544112', 'batch_code' => 'JYC_2018', 'commonid' => 3568, 'time' => time(), 'appkey' => "xxxxxxxxxxxxx", 'convert_type' => "fcode", 'ade' => 1]; $body = $this->presign_body($input); openssl_sign($body, $signed, $pri); $input['signed'] = base64_encode($signed); $convert = new openapi\Convertor(); $ret = $convert->verify($input); } private function presign_body($input) { ksort($input); reset($input); $params = []; foreach ($input as $key => $val) { if(in_array($key,$this->fields)) { $params[] = "{$key}={$val}"; } } return implode('&',$params); } public function testXmmzConvert() { $appkey = md5('JYC_CHANNEL'); $input = ['appid' => 'JYC_CHANNEL', 'appkey' => 'aa161e84685b42a6862dfa5552195240', 'convert_sn' => bonus\make_bonus_sn(), 'batch_code' => 'JYC001', 'commonid' => 3568, 'time' => time(), 'convert_type' => "fcode", 'ade' => 1]; $cli = new openapi\GoodsConvertor(); $url = $cli->fcode($input); $convert = new openapi\Convertor(); $ret = $convert->verify($input); } public function testDHKJConvert() { $input = ['appid' => 'DHKJ_CHANNEL', 'appkey' => '13e5b127aed296ef6d490cd7cc4c161e', 'convert_sn' => bonus\make_bonus_sn(), 'time' => time(), 'convert_type' => "user", 'return_url' => "http://192.168.0.200/mobile/index.php", 'mobile' => '13911129000']; $cli = new openapi\GoodsConvertor(); $url = $cli->user($input); $fileds = ['appid','appkey','convert_sn','convert_type','time','mobile','return_url']; $convert = new openapi\Convertor($fileds); $str = parse_url($url,PHP_URL_QUERY); parse_str($str,$input); $ret = $convert->verify($input); } public function testPriviteKey() { $res = openssl_pkey_new(['private_key_bits' => 1024,'private_key_type' => OPENSSL_KEYTYPE_RSA]); openssl_pkey_export($res, $private_key); $public_key = openssl_pkey_get_details($res)['key']; Log::record("pub={$public_key}",Log::DEBUG); Log::record("privite={$public_key}",Log::DEBUG); } }