params=%{"app_id" => "20171021xxxxxx", "auth_app_id" => "2017102109xxxxx",
"buyer_id" => "2088002xxxxxxxxxxx",
"buyer_logon_id" => "how***@xxxxx.cn", "buyer_pay_amount" => "0.01",
"charset" => "utf-8",
"fund_bill_list" => "[{\"amount\":\"0.01\",\"fundChannel\":\"ALIPAYACCOUNT\"}]",
"gmt_create" => "2017-10-26 14:05:23", "gmt_payment" => "2017-10-26 14:05:25",
"invoice_amount" => "0.01",
"notify_id" => "xxxxxxxxxxxxxxxxxxxxxxxxxx",
"notify_time" => "2017-10-26 15:29:53", "notify_type" => "trade_status_sync",
"out_trade_no" => "201710261alipay-198",
"point_amount" => "0.00", "receipt_amount" => "0.01",
"seller_email" => "[email protected]", "seller_id" => "208811135xxxxxxxxxxx",
"sign" => "P458IeGg..............trQ==",
"sign_type" => "RSA2", "subject" => "1", "total_amount" => "0.01",
"trade_no" => "2017102621001004390xxxxxxxxxxx",
"trade_status" => "TRADE_SUCCESS", "version" => "1.0"}
sn = params["sign"]
params = Map.drop(params, ["sign", "sign_type"])
needSigned = Enum.map(params, fn({k, v}) -> "#{k}=#{URI.decode(v)}" end) |> Enum.join("&")
pkeys="-----BEGIN PUBLIC KEY-----\nYOUR public keys...\n-----END PUBLIC KEY-----"
snio= :base64.decode(sn)
spk = :public_key.pem_decode(pkeys) |> hd |> :public_key.pem_entry_decode
s = :public_key.verify(needSigned , :sha256, snio, spk)